当客户端(服务请求方)向服务端(服务提供方)发起请求时,服务器端需要向客户端提供认证。服务端需要生成一个keystore和一个服务器密钥对儿(公钥和私钥),客户端需要生成一个truststore,然后导入服务端的公钥证书。
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的密码,接着会提示输入名字等信息,如下图:
补充:输入
keytool会把生成的keystore文件默认保存到C:\Users\lenovo路径下(用户目录下的计算机名称下)接下来生成的所有文件也都保存到此处。
可以执行下面的命令:
keytool -list -v -keystore shfqkeystore.jks
会显示出以下信息,如图:
下面的命令可以导出自签公钥证书:
keytool -export -alias certificatekey -keystore shfqkeystore.jks -rfc -file shfqcert.cer
其中shfqcert.cer是导出证书的名称,可以随便起个名字,shfqkeystore.jks是2中生成的keystore 文件。
执行上面的命令会要求输入shfqkeystore的密码,会显示以下信息,如下图。
把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的密码,如下图:
keytool -list -v -keystore shfqtruststore.jks
shfqtruststore.jks是5生成的truststore文件名。
到此为止,keystore、truststore、公钥证书都已生成完毕。
找到tomcat安装路径下的conf路径下的server.xml文件
打开server.xml,找到
这样一段注释,在这段注释下面添加如下一段代码:
disableUploadTimeout="true" enableLookups="false" maxThreads="25" port="8443" keystoreFile="D:\developTools\apache-tomcat-idm\tomcat.keystore" keystorePass="111111" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true" sslProtocol="TLS" /> 其中clientAuth=”false”表示是SSL单向认证,即服务端认证,port=”8443”是https的访问端口,keystoreFile="D:\developTools\apache-tomcat-idm\tomcat.keystore"是第一步中生成的keystore的保存路径,keystorePass="111111"是第一步生成的keystore的密码。 到此服务器端已经配置完毕,为了验证是否已经配置正确,我们可以在浏览器中进行验证。首先启动tomcat,然后在浏览器地址输入栏中输入:https://localhost:8443 如果看到如下截图的一个页面则表示服务端已经配置成功了。 之所以会出现“该网站的安全证书不受信任!”的警告是因为证书是自己签发的而不是一个权威的CA机构签发的。 在客户端配置服务端的地址时要注意:比如 https://shifengqiang:8443/syn/Users 这个地址协议格式是https主机名是shifengqiang,这个shifengqiang就是在第2步中生成服务器端证书时要求输入的“您的名字与姓氏是什么?”名字。8443是https协议默认的端口。 在客户端向服务器端同步代码前面加入这样一段代码: System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol"); System.setProperty("java.protocol.handler.pkgs", "com.ibm.net.ssl.internal.www.protocol"); String trustStorePath = “D:\developTools\apache-tomcat-idm\shfqtruststore.jks”; String trustStorePassword = “client”; System.setProperty("javax.net.ssl.trustStore", trustStorePath); System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword); 其中trustStorePath 是truststore的路径,trustStorePassword 是truststore的密码。至此单向SSL配置完毕。 参考链接:http://zjumty.iteye.com/blog/1885356 在配置的过程中参考了网上大量的链接,有些链接没有做记录恕不一一列举。
最后还得在hosts文件中配置自己的IP地址,把IP地址映射为一个common name,这个common name就是您在第2步中生成服务器证书时候的“您的名字与姓氏是什么?”输入的名字。8 客户端配置