文章参考了:http://www.blogjava.net/icewee/archive/2012/06/04/379947.html
个人简单做了下
Tomcat版本 7.0.29
JDK版本 6u38
流程:
进行设置
实验语句:
CN必须与服务端地址相同 生成服务器端keystore keytool -validity 365 -genkey -v -alias server -keyalg RSA -keystore server.keystore -dname "CN=127.0.0.1,OU =hangzhou,ST=zhejiang,c=cn" -storepass 123456server -keypass 123456server 生成客户端 这边要用PKCS12这个库类型 不然不能被浏览器成功解析 keytool -validity 365 -genkeypair -v -alias client -keyalg RSA -storetype PKCS12 -keystore client.p12 -dname "CN=client,OU=zjut,O=zjut,L=hangzhou,ST=zhejiang,c=cn" -storepass 123456client -keypass 123456client 导出客户端的认证文件 keytool -export -v -alias client -keystore client.p12 -storetype PKCS12 -storepass 123456client -rfc -file client.cer 导出服务器的认证文件 //这步可以不做 keytool -export -v -alias server -keystore server.keystore -storepass 123456server -rfc -file server.cer 将客户端的认证文件放入服务器端的库里面去 //应该可以设定到不同的库 对应server下的truststoreFile即可 keytool -import -v -alias client -file client.cer -keystore server.keystore -storepass 123456server 这句是用来查看的 keytool -list -keystore server.keystore -storepass 123456server
这边的流程很简单 就是制作服务器端的证书 再制作客户端的证书
把客户端的证书放入服务器端的验证库(这里把他放到了服务器端的密钥库里) |
在tomcat下的server.xml设置一下使用SSL以及对应端口(这边可以直接覆盖掉8080端口 但为了实验的方便 直接用8443端口)
配置如下:
<Connector SSLEnabled="true" acceptCount="100" clientAuth="true" disableUploadTimeout="true" enableLookups="false" maxThreads="25" port="8443" keystoreFile="server.keystore" keystorePass="123456server" truststoreFile="server.keystore" truststorePass="123456server" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true" sslProtocol="TLS" /> 这边的设置也很简单 SSLEnabled="true" 打开SSL方式 clientAuth="true" 要求客户端验证 不然就无法打开 port="8443" 8443端口 keystoreFile="server.keystore" 使用的keystore文件 truststoreFile="server.keystore" 放客服端验证的keystore文件
然后在浏览器的SSL选项里的个人里 把生成的client.p12放入(让服务器端可以验证,这样做之后就可以访问设置了必须验证的网页 但会显示不安全的证书):
然后再受信任的根证书颁发机构里把服务器端的证书(server.cer)放入: