参考的这篇文章: https原理及tomcat配置https方法
注意,一定要保证D盘下有home2这个文件夹。
为服务器生成证书:
C:\Users\Administrator>keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\home2\tomcat.keystore -validity 3650输入密钥库口令: (aaabbb)
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: localhost (tomcat要部署到的那台服务器的域名, 这一步最好写成域名的形式,如果写成ip地址,在谷歌浏览器下会报错)
您的组织单位名称是什么?
[Unknown]: lh
您的组织名称是什么?
[Unknown]: sb
您所在的城市或区域名称是什么?
[Unknown]: bj
您所在的省/市/自治区名称是什么?
[Unknown]: bj
该单位的双字母国家/地区代码是什么?
[Unknown]: ZH
CN=192.168.40.122, OU=lh, O=sb, L=bj, ST=bj, C=ZH是否正确?
[否]: y
正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 3,650
天):
CN=192.168.40.122, OU=lh, O=sb, L=bj, ST=bj, C=ZH
输入 <tomcat> 的密钥口令
(如果和密钥库口令相同, 按回车):
[正在存储D:\home2\tomcat.keystore]
为客户端生成证书
为客户端生成证书(IE和Firefox,证书格式应该是PKCS12):C:\Users\Administrator>keytool -genkey -v -alias myapp -keyalg RSA -storetype PKCS12 -keystore D:\home2\myapp.p12
输入密钥库口令: (bbbaaa)
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: cjb
您的组织单位名称是什么?
[Unknown]: ccc
您的组织名称是什么?
[Unknown]: ccc
您所在的城市或区域名称是什么?
[Unknown]: 1
您所在的省/市/自治区名称是什么?
[Unknown]: 1
该单位的双字母国家/地区代码是什么?
[Unknown]: cn
CN=cjb, OU=ccc, O=ccc, L=1, ST=1, C=cn是否正确?
[否]: y
正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 90 天
):
CN=cjb, OU=ccc, O=ccc, L=1, ST=1, C=cn
[正在存储D:\home2\myapp.p12]
让服务器信任客户端证书:
C:\Users\Administrator>keytool -export -alias myapp -keystore D:\home2\myapp.p12 -storetype PKCS12 -storepass bbbaaa -rfc -file D:\home2\myapp.cer存储在文件 <D:\home2\myapp.cer> 中的证书
将该文件导入到服务器的证书库
C:\Users\Administrator>keytool -import -v -file D:\home2\myapp.cer -keystore D:\home2\tomcat.keystore
输入密钥库口令: (aaabbb)
所有者: CN=cjb, OU=ccc, O=ccc, L=1, ST=1, C=cn
发布者: CN=cjb, OU=ccc, O=ccc, L=1, ST=1, C=cn
序列号: 7aa03c37
有效期开始日期: Thu May 26 11:13:43 CST 2016, 截止日期: Wed Aug 24 11:13:43 CST
2016
证书指纹:
MD5: 1C:FB:4D:C7:4D:50:5F:66:DE:BD:B0:83:AD:F7:0C:4C
SHA1: 3A:BC:44:F0:CE:82:57:19:19:1D:3F:41:4C:39:A7:65:F7:45:4D:1C
SHA256: 73:85:34:87:AE:8D:2D:22:13:25:BD:42:94:10:3B:99:4C:68:6B:19:2E:
98:0E:F6:54:B8:A8:60:82:66:3E:97
签名算法名称: SHA256withRSA
版本: 3
扩展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: F8 02 6A AF 7D 12 E6 C2 62 65 E7 51 0A 5D A7 41 ..j.....be.Q.].A
0010: C4 8E 6F 2E ..o.
]
]
是否信任此证书? [否]: y
证书已添加到密钥库中
[正在存储D:\home2\tomcat.keystore]
通过list命令查看服务器的证书库
C:\Users\Administrator>keytool -list -keystore D:\home2\tomcat.keystore
输入密钥库口令: (aaabbb)
密钥库类型: JKS
密钥库提供方: SUN
您的密钥库包含 2 个条目
tomcat, 2016-5-26, PrivateKeyEntry,
证书指纹 (SHA1): 3D:A8:2C:13:81:26:89:AA:56:F9:65:89:47:7C:B3:29:86:86:EE:C7
mykey, 2016-5-26, trustedCertEntry,
证书指纹 (SHA1): 3A:BC:44:F0:CE:82:57:19:19:1D:3F:41:4C:39:A7:65:F7:45:4D:1C
让客户端信任服务器证书
C:\Users\Administrator>keytool -keystore D:\home2\tomcat.keystore -export -alias tomcat -file D:\home2\tomcat.cer
输入密钥库口令: (aaabbb)
存储在文件 <D:\home2\tomcat.cer> 中的证书
配置Tomcat服务器
打开Tomcat根目录下的/conf/server.xml,找到Connector port="8443"配置段,修改为如下:<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true" maxThreads="150" scheme="https"
secure="true" clientAuth="true" sslProtocol="TLS"
keystoreFile="D:\\home2\\tomcat.keystore" keystorePass="aaabbb"
truststoreFile="D:\\home2\\tomcat.keystore" truststorePass="aaabbb" />
(tomcat要与生成的服务端证书名一致)
属性说明:
clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证
keystoreFile:服务器证书文件路径
keystorePass:服务器证书密码
truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书
truststorePass:根证书密码
测试
在浏览器中输入:https://localhost:8443/,会弹出选择客户端证书界面,点击“确定”,会进入tomcat主页,地址栏后会有“锁”图标,表示本次会话已经通过HTTPS双向验证,接下来的会话过程中所传输的信息都已经过SSL信息加密。IE和chrome用的是系统的证书管理器。双击.p12文件后已经导好证书了。 火狐用的是自己的证书管理器,所以要手动再导入一次.p12文件。
火狐浏览器导入证书:
将自签发的 SSL 证书添加为 Firefox 中受信任的根证书
可以看到涉及到 D:\home2\tomcat.keystore 这个东西,用的密码都是 aaabbb
e
e
e
e