本文演示Https双向验证实例,Web容器为Tomcat。
一.准备工作:
1.创建服务器KeyStore。
命令:keytool -genkey -alias server_jks_cennavi -keyalg RSA -keypass 123456 -storepass 123456 -keystore server.jks -validity 3650.
keytool命令如下:
-genkey 在用户主目录中创建一个默认文件".jks",还会产生一个server_jks_cennavi的别名,server_jks_cennavi中包含用户的公钥、私钥和证书
-alias 产生别名
-keystore 指定密钥库的名称(产生的各类信息将不在.jks文件中
-keyalg 指定密钥的算法
-validity 指定创建的证书有效期多少天
-keysize 指定密钥长度
-storepass 指定密钥库的密码
-keypass 指定别名条目的密码
-dname 指定证书拥有者信息
在相对应的 H:\keys\server 目录下你能看到一个server.jks文件。
3.导出服务端证书。
定位到服务端 H:\keys\server 目录:keytool -export -trustcacerts -alias server_jks_cennavi -file server.cer -keystore server.jks -storepass 123456
在相对于的 H:\keys\server 目录下你能看到一个server.cer文件。
4.创建客户端KeyStore。
在相对应的 H:\keys\client 目录下你能看到一个client.p12文件。
5.导出客户端Cer证书。
定位到服务端 H:\keys\client 目录:keytool -export -trustcacerts -alias client_p12_cennavi -file client.cer -keystore client.p12 -storepass 123456 -storetype PKCS12
在相对于的 H:\keys\client目录下你能看到一个client.cer文件。
6.交换导入服务端和客户端证书,作为双方信任证书。
将客户端证书导入服务端keystore:keytool -import -trustcacerts -alias client_p12_cennavi -file client.cer -keystore server.jks
将服务端证书导入客户端keystore:keytool -import -trustcacerts -alias server_jks_cennavi -file server.cer -keystore client.jks
7.配置服务端tomcat文件下/conf/server.xml。
设置clientAuth="true"为双向验证也就是服务端同时验证客户可证书。
设置clientAuth="false"为双向验证也就是只验证服务端证书。
8.启动服务端程序tomcat服务,打开IE输入访问地址:https://localhost:8443/ServerDemo,本人的测试程序,程序很简单里面就一个对外开发的Servlet程序片。
你会发现IE提示:Internet Explore 无法显示该界面,这是因为我们没有将客户端client.p12证书导入到IE中出现的问题。
9.导入客户端client.p12证书,双击client.p12,next-->next-->输入私钥密码。
再次打开IE输入访问地址https://localhost:8443/ServerDemo,会提示一个对话框,为什么会出现这个对话框我也不是很清楚....
如图:
点击确定:你会看到IE浏览器已经阻止了你继续访问,原因是没有安装服务端证书。
点击安装服务端证书。
到这里就告一段落了,那如何用java程序来调用服务器端对外开放的Servlet程序片?
客户端代码:
运行在控制台中可以看到服务端返回的信息。
本人第一次写文章,写的不是很好,文章中可能有不正确的地方,请各位朋友指出来,谢谢。
大家有什么好的方法和建议请留言,谢谢。