命令介绍
• -genkey 在用户主目录中创建一个默认文件”.keystore”,还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书(在没有指定生成位置的情况下,keystore会存在用户系统默认目录)
注:-genkey可以写成-genkeypair
• -alias 产生别名 每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写
• -keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中)
• -keyalg 指定密钥的算法 (如 RSA DSA,默认值为:DSA)
• -validity 指定创建的证书有效期多少天(默认 90)
• -keysize 指定密钥长度 (默认 1024)
• -storepass 指定密钥库的密码(获取keystore信息所需的密码)
• -keypass 指定别名条目的密码(私钥的密码)
• -dname 指定证书发行者信息 其中: “CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名 称,ST=州或省份名称,C=单位的两字母国家代码”
• -list 显示密钥库中的证书信息 keytool -list -v -keystore 指定keystore -storepass 密码
• -v 显示密钥库中的证书详细信息
• -export 将别名指定的证书导出到文件 keytool -export -alias 需要导出的别名 -keystore 指定keystore -file 指定导出的证书位置及证书名称 -storepass 密码
• -file 参数指定导出到文件的文件名
• -delete 删除密钥库中某条目 keytool -delete -alias 指定需删除的别 -keystore 指定keystore – storepass 密码
• -printcert 查看导出的证书信息 keytool -printcert -file g:\sso\michael.crt
• -keypasswd 修改密钥库中指定条目口令 keytool -keypasswd -alias 需修改的别名 -keypass 旧密码 -new 新密码 -storepass keystore密码 -keystore sage
• -storepasswd 修改keystore口令 keytool -storepasswd -keystore g:\sso\michael.keystore(需修改口令的keystore) -storepass pwdold(原始密码) -new pwdnew(新密码)
• -import 将已签名数字证书导入密钥库 keytool -import -alias 指定导入条目的别名 -keystore 指定keystore -file 需导入的证书
• dname的值详解:
CN(Common Name名字与姓氏【域名】)
OU(Organization Unit组织单位名称)
O(Organization组织名称)
L(Locality城市或区域名称)
ST(State州或省份名称)
C(Country国家名称)
用JDK自带的keytool工具生成证书
1.生成服务器证书
keytool -genkey -alias test -keypass 123456 -dname
“CN=www.test.com,OU=LIULI,O=LIULI,L=BJ,ST=BJ,C=CN” -keyalg RSA
-keysize 2048 -validity 3650 -keystore D:\keys\test.keystore -storepass 123456

查看证书:
keytool -list -v -keystore D:\keys\test.keystore -storepass 123456
或
keytool -list -rfc -keystore D:\keys\test.keystore -storepass 123456
2.导出证书:
keytool -export -alias test -keystore D:\keys\test.keystore -file
D:\keys\test.crt -storepass 123456
查看证书:
keytool -printcert -file D:\keys\test.crt
- 将证书tomcat.crt导入到JVM中(可选):
keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file
D:\keys\test.crt -alias test
导出私钥
java exportpriv 是一个java工具,可以用来导出 JSSE Keystore 中的私钥。由于JDK自带的keytool不提供导出私钥功能,这个工具可以弥补这个不足。
https://github.com/472732787/ssl/blob/master/myexportpriv.jar
java -jar myexportpriv.jar D:\keys\test.keystore test 123456
把程序输入的文件保存到test.key中
Tomcat配置
tomcat目录的conf/server.xml文件

设置keystoreFile、keystorePass修改结果如下:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:\keys\test.keystore"
keystorePass="123456" />

nginx配置
和Apache不一样,Nginx没有Certificat Chain这个参数,所以你要把你的证书和中间证书合并。合并证书很简单,创建一个先的文件 test-chain.crt,内容如下:
-----BEGIN CERTIFICATE-----
中的证书信息(公钥)
keytool -list -rfc -keystore D:\keys\test.keystore -storepass 123456
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
用exportpriv获取的私钥
-----END PRIVATE KEY-----
upstream tests.com{
server 127.0.0.1:8443 weight=1;
}
server {
listen 84 ssl;
server_name tests.com;
ssl on;
ssl_certificate D:\\keys\\test-chain.crt;
ssl_certificate_key D:\\keys\\test.key;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass https://tests.com;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
#fastcgi_param HTTPS on;
}


1万+

被折叠的 条评论
为什么被折叠?



