一、为服务器生成证书
keytool -genkey -alias tomcat -keyalg RSA -keystore /www/wdlinux/my.keystore -dname "CN=mytomcat.com, OU=mytomcat.com, O=mytomcat.com, L=SH, ST=SH, C=CN" -keypass changeit -storepass changeit -validity 36500
-genkey表示要创建一个新的密钥
-alias密钥的别名
-keyalg使用加密的算法,这里是RSA
-keystore 密钥保存在D:盘目录下的mykeystore文件中
-keypass私有密钥的密码,这里设置为changeit
-storepass 存取密码,这里设置为changeit,这个密码提供系统从mykeystore文件中将信息取出
-validity该密钥的有效期为 36500表示100年 (默认为90天)
使用-dname一次性将参数填写完。
-dname表示密钥的Distinguished Names,
CN=mytomcat.com
OU=mytomcat.com
O=mytomcat.com
L=SH
S=SH
C=CN
Distinguished Names表明了密钥的发行者身份
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: mytomcat.com # 此处要写域名或者: localhost
您的组织单位名称是什么?
[Unknown]: mytomcat.com
您的组织名称是什么?
[Unknown]: mytomcat.com
您所在的城市或区域名称是什么?
[Unknown]: SH
您所在的省/市/自治区名称是什么?
[Unknown]: SH
该单位的双字母国家/地区代码是什么?
[Unknown]: CN
CN=mytomcat.com, OU=mytomcat.com, O=mytomcat.com, L=SH, ST=SH, C=CN是否正确?
[否]: y
正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 36,50
0 天):
CN=mytomcat.com, OU=mytomcat.com, O=mytomcat.com, L=SH, ST=SH, C=CN
输入 <tomcat> 的密钥口令
(如果和密钥库口令相同, 按回车):
再次输入新口令:
[正在存储/www/wdlinux/my.keystore]
将mytomcat.com写入/etc/hosts中, 127.0.0.1 mytomcat.com
二、为客户端生成证书
keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore /www/wdlinux/client.p12 -validity 36500
"CN=mytomcat.com, OU=mytomcat.com, O=mytomcat.com, L=SH, ST=SH, C=CN"
三. 让服务器信任客户端证书
keytool -export -alias client -keystore /www/wdlinux/client.p12 -storetype PKCS12 -storepass changeit -rfc -file /www/wdlinux/clientforserver.cer
- 将该文件导入到服务器的证书库,添加为一个信任证书:
keytool -import -v -file /www/wdlinux/clientforserver.cer -keystore /www/wdlinux/tomcat.keystore
- 查看证书信息:完成之后通过list命令查看服务器的证书库,可以看到两个证书,一个是服务器证书,一个是受信任的客户端证书:
keytool -list -v -keystore /www/wdlinux/my.keystore -storepass changeit
四、让客户端信任服务器证书
keytool -export -alias tomcat -keystore /www/wdlinux/my.keystore -file /www/wdlinux/CA.cer
五、客户端安装证书
现得到如下四个证书文件
CA.cer
client.p12
clientforserver.cer
my.keystore
注:在客户端双击运行client.p12,一直点击下一步,直到显示导入成功。
六、修改tomcat参数发布服务
tomcat/bin/server.xml中修改
1、注释掉8080端口配置 (不是必须,也可以不注释,不注释的话,则http 8080端口也可以访问)
<!--<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />-->
2、取消注释8443端口配置,修改内容:
tomcat8.5版本以上修改方式:
tomcat8.5以上版本的修改方式:
将
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
修改成:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true"
keystoreFile="/www/wdlinux/my.keystore" keystorePass="changeit"
>
<!--<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>-->
</Connector>
tomcat8.0版本修改方式:
tomcat8.0的server.xml文件应该这样改动:
server.xml配置:
将
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
修改成:
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
maxThreads="150"
scheme="https"
secure="true"
clientAuth="true"
sslProtocol="TLS"
keystoreFile="/www/wdlinux/my.keystore"
keystorePass="changeit"
truststoreFile="/www/wdlinux/my.keystore"
truststorePass="changeit" />
属性说明:
clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证
keystoreFile:服务器证书文件路径
keystorePass:服务器证书密码
truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书
truststorePass:根证书密码
注意:
① 设置clientAuth属性为True时,需要手动导入客户端证书才能访问。
② 要访问https请求 需要访问8443端口,访问http请求则访问Tomcat默认端口(你自己设置的端口,默认8080)即可。
注:强制https访问
在 tomcat /conf/web.xml 中的 </welcome- file-list> 后面加上这
<login-config>
<!-- Authorization setting for SSL -->
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>