1 SSL单向认证概念
当客户端(服务请求方)向服务端(服务提供方)发起请求时,服务器端需要向客户端提供认证。服务端需要生成一个keystore和一个服务器密钥对儿(公钥和私钥),客户端需要生成一个truststore,然后导入服务端的公钥证书。
2 keystore以及服务器密钥对儿的生成
keytool-genkeypair -alias certificatekey -keyalg RSA -validity 365 -keystore shfqkeystore.jks
这条命令会在生成keystore后接着生成一个密钥对儿。RSA是非对称密钥算法,也可以改为 keytool支持的其他密钥算法,365代表的是证书的有效期,可以自己指定,shfqkeystore.jks是keystroe的名称,也可以自己指定。打开cmd命令行,输入:
keytool-genkeypair -alias certificatekey -keyalg RSA -validity 365 -keystore shfqkeystore.jks
会提示输入keystore的密码,接着会提示输入名字等信息,如下图:
补充:输入的主密码,是指生成服务端证书的私钥。服务端私钥如果和keystore的相同的话,直接按回车。建议直接按回车,即服务端私钥和keystore的密码相同。如果两者的密码不相同的话在服务端tomcat server.xml中配置完毕以后启动tomcat会报一个UnrecoverableKeyException: Cannot recover key的异常(后面会介绍服务端 tomcat server.xml 的配置的)。
keytool会把生成的keystore文件默认保存到C:\Users\lenovo路径下(用户目录下的计算机名称下)接下来生成的所有文件也都保存到此处。
3 验证新生成的keystor文件以及证书信息
可以执行下面的命令:
keytool -list -v -keystore shfqkeystore.jks
会显示出以下信息,如图:
4 导出公钥证书
下面的命令可以导出自签公钥证书:
keytool -export -alias certificatekey -keystore shfqkeystore.jks -rfc -file shfqcert.cer
其中shfqcert.cer是导出证书的名称,可以随便起个名字,shfqkeystore.jks是2中生成的keystore 文件。
执行上面的命令会要求输入shfqkeystore的密码,会显示以下信息,如下图。
5 Truststore的生成以及公钥证书的导入
把4生成的公钥证书shfqcert.cer导入到truststore中
Keytool -import -alias certificatekey -file shfqcert.cer -keystore
shfqtruststore.jks
shfqcert.cer是4导出的公钥证书,shfqtruststore.jks可以随便起,是生成的truststore的文件名。这条命令首先会生成一个truststore,然后导入4生成的公钥证书shfqcert.cer。
执行keytool -import -alias certificatekey -file shfqcert.cer -keystore shfqtruststore.jks后,首先会提示输入truststore的密码,如下图:
6 验证5生成的truststore文件
keytool -list -v -keystore shfqtruststore.jks
shfqtruststore.jks是5生成的truststore文件名。
到此为止,keystore、truststore、公钥证书都已生成完毕。