tomcat配置https双向验证
以windows为例,进入cmd终端,用命令切换进入%JAVA_HOME%/bin目录
1.为服务器生成证书
1
| keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\home\tomcat.keystore -validity 36500
|
参数简要说明:
1 2 3
| “D:\home\tomcat.keystore” 表示证书文件的保存路径 tomcat.keystore 表示证书文件名称 “-validity 36500” 表示证书有效期,36500表示100年,默认值是90天 “tomcat”为自定义证书名称
|
输入keystore密码(必填项)
此处需要输入大于6个字符的字符串
您的名字与姓氏是什么?(必填项)
必须是TOMCAT部署主机的域名或者IP[如:baidu.com 或者 119.75.217.109](就是你将来要在浏览器中输入的访问地址)
后面的那些都可以不填,直接敲回车,最后的主密码建议与之前keystore的密码一致)事例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| C:\Windows\system32>keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\home\tomcat.keystore -validity 36500 输入keystore密码:123456 再次输入新密码:123456 您的名字与姓氏是什么? [Unknown]: baidu.com 您的组织单位名称是什么? [Unknown]: 您的组织名称是什么? [Unknown]: 您所在的城市或区域名称是什么? [Unknown]: 您所在的州或省份名称是什么? [Unknown]: 该单位的两字母国家代码是什么 [Unknown]: CN CN=baidu.com, OU=, O=, L=, ST=, C=CN 正确吗? [否]: y 正在为以下对象生成 1,024 位 RSA 密钥对和自签名证书 (SHA1withRSA)(有效期为 36,500 天): CN=baidu.com, OU=, O=, L=, ST=, C=CN 输入<tomcat>的主密码 (如果和 keystore 密码相同,按回车): [正在存储 D:\home\tomcat.keystore] C:\Windows\system32>
|
2.为客户端生成证书(需要PKCS12格式)
1
| keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore D:\home\client.key.p12
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| C:\Windows\system32>keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore D:\home\client.key.p12 输入keystore密码:123456 再次输入新密码:123456 您的名字与姓氏是什么? [Unknown]: baidu.com 您的组织单位名称是什么? [Unknown]: 您的组织名称是什么? [Unknown]: 您所在的城市或区域名称是什么? [Unknown]: 您所在的州或省份名称是什么? [Unknown]: 该单位的两字母国家代码是什么 [Unknown]: CN CN=baidu.com, OU=, O=, L=, ST=, C=CN 正确吗? [否]: y 正在为以下对象生成 1,024 位 RSA 密钥对和自签名证书 (SHA1withRSA)(有效期为 90 天): CN=baidu.com, OU=, O=, L=, ST=, C=CN [正在存储 D:\home\client.key.p12] C:\Windows\system32>
|
之后,在D:\home\路径下,便能看到两个文件
1 2
| tomcat.keystore client.key.p12
|
3.双击client.key.p12安装
安装需要密码,就是刚才设置的”123456”
安装过程选择“将所有的证书放入下列存储”–“个人”,下一步直至导入完成
4.让服务器信任客户端证书
先导出客户端证书为cer格式,然后再添加到keystore中,此过程需要密码,步骤如下:
1 2
| 1)keytool -export -alias mykey -keystore D:\home\client.key.p12 -storetype PKCS12 -storepass password -rfc -file D:\home\client.cer 2)keytool -import -v -file D:\home\client.cer -keystore D:\home\tomcat.keystore
|
5.查看服务器的证书库
此时list命令查看服务器的证书库,可以看到两个证书,一个是服务器证书,一个是受信任的客户端证书
keytool -list -keystore D:\home\tomcat.keystore
6.导出服务端证书为cer格式
keytool -keystore D:\home\tomcat.keystore -export -alias tomcat -file D:\home\tomcat.cer
7.安装服务端证书
双击,安装到“将所有的证书放入下列存储”–“受信任的根证书颁发机构”
8.配置Tomcat服务器
打开Tomcat根目录下的/conf/server.xml,找到Connector port=”8443”配置段,修改为如下:
1 2 3 4 5
| <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="D:\\home\\tomcat.keystore" keystorePass="123456" truststoreFile="D:\\home\\tomcat.keystore" truststorePass="123456" />
|
属性说明:
clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证
keystoreFile:服务器证书文件路径
keystorePass:服务器证书密码
truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书
truststorePass:根证书密码
9.最后在项目的web.xml中 前加入,之后就可以用8443端口访问https请求了
1 2 3 4 5 6 7 8 9
| <security-constraint> <web-resource-collection> <web-resource-name>Protected Context</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
|
省去上方的2、3、4、5步骤即为单项配置