Tomcat_实现Https双向认证

1、生成服务器证书库

keytool -validity 365 -genkey -v -alias tomcat -keyalg RSA -keystore D:\keystore\tomcat\tomcat.keystore -dname "CN=localhost, OU=阿里集团, O=商户平台, L=杭州, ST=浙江, C=中国" -storepass changeit -keypass changeit
wps_clip_image-27756[3][1]

keytool  -list -v -keystore D:\keystore\tomcat\tomcat.keystore  -storepass changeit
wps_clip_image-18527[3][1]

2、生成客户端证书库

keytool -validity 365 -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore D:\keystore\tomcat\client.p12  -dname "CN=client, OU=阿里集团, O=商户平台, L=杭州, ST=浙江, C=中国" -storepass changeit -keypass changeit
wps_clip_image-17240[3][1]

keytool  -list -v -keystore D:\keystore\tomcat\client.p12 -storetype PKCS12  -storepass changeit
wps_clip_image-64[3][1]

3、从客户端证书库中导出客户端证书

keytool -export -v -alias client -keystore D:\keystore\tomcat\client.p12 -storetype PKCS12 -storepass changeit -keypass changeit -rfc -file D:\keystore\tomcat\client.cer
wps_clip_image-17296[3][1]

keytool -printcert -file D:\keystore\tomcat\client.cer

wps_clip_image-1318[3][1]

5  客户端信任证书导入到服务器证书库 [双向认证]

[如果客户端没有导入到服务器,双向认证的时候需要保存]
keytool -import -v -alias client -file D:\keystore\tomcat\client.cer -keystore D:\keystore\tomcat\tomcat.keystore -storepass changeit

wps_clip_image-23121[3][1]

6  客户端安装客户端证书 [双向认证]

D:\keystore\tomcat\client.p12,双击导入,或在浏览器安装证书

7、查看证书库中的全部证书

keytool  -list -v -keystore D:\keystore\tomcat\tomcat.keystore  -storepass changeit

keytool  -list -v -keystore  cacerts  -storepass changeit

wps_clip_image-19427[3][1]

8  服务端接收到客户端请求,验证私钥[双向认证]

wps_clip_image-4653[3][1]

客户端认证,允许同意服务端证书[单向认证]

服务端认证,当客户端同意服务端证书时,再发放客户端个人证书进行安装,用户安装完证书后,就可以自动完成登陆证书了.

8、 Tomat配置

使用文本编辑器编辑${catalina.base}/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="${catalina.base}/key/server.keystore" keystorePass="123456"
truststoreFile="${catalina.base}/key/server.keystore" truststorePass="123456"/>
# truststoreFile、keystoreFile为已经生成的服务器证书的地址
# truststorePass、keystorePass为自定义的服务器证书的密码

备注:
keystoreFile:指定服务器密钥库,可以配置成绝对路径,如“D:/key/server.keystore”,本例中是在Tomcat目录中创建了一个名称为key的文件夹,仅供参考。
keystorePass:密钥库生成时的密码
truststoreFile:受信任密钥库,和密钥库相同即可

truststorePass:受信任密钥库密码

clientAuth: clientAuth指定是否需要验证客户端证书,如果该设置为“false”,则为单向SSL验证,SSL配置可到此结束。如果clientAuth设置为“true”,表示强制双向SSL验证

9、 服务端证书添加信任

https://localhost:8443/

以下是FireFox浏览器提示如下:

wps_clip_image-16041[3][1]

点击添加例外,可以查看我们的证书

wps_clip_image-31950[3][1]

10、客户端证书安装

如果是IE浏览器的话,双击D:\keystore\tomcat\client.p12 就可以安装成功了

如果是firefox的话,可以手工导入

如果要实现双向认证,则需要在Ie/FireFox除了安装client.p12外,还需要安装server.cer

按照提示安装证书,将证书填入到“受信任的根证书颁发机构”[客户端信息服务端证书]

[以前单向认证[服务端信用客户端证书]]

wps_clip_image-19042[3][1]

wps_clip_image-846[3][1]

这不就是我们创建的自签名的公钥证书吗?

11、双向认证(Https默认端口为443)

我们链接一般的SSL时采用的是单向验证,客户机只验证服务器的证书,服务器不验证客户机的证书;而连接网上银行时使用的U盾就是用来存储进行双向验证所需要的客户端证书的。

实际上,基于SSL的HTTPS使用的默认端口是443。但Tomcat在这里将HTTPS端口设置为8443。<Connector>配置里的一些属性参数如下表:

clientAuth如果设为true(即双向认证)

双向认证指的是客户机验证服务器的证书,服务器也验证客户机的证书.

clientAuth="want" clientAuth="want"配置成want表示不强求,如果有则使用,配置成true的话那就必须通过证书,否则直接返回404

我们这里为了如果没有证书还可以进去普通登录页面,所以采取了want这个参数.

由于SSL技术已建立到绝大多数浏览器和Web服务器程序中,因此,仅需在Web服务器端安装服务器证书就可以激活SSL功能了。

wps_clip_image-1666[3][1]

如何为客户端装trust keyStore

如果双向认证,比如新增一个用户,需要用户下载证书,并把证书以某种key生成并放到服务器的keystore中,这样用户在客户端生成时,就需要输入某种key就可以成功导入证书.

12、多系统双向认证(Https默认端口为443)

当用户安装了客户端证书,那么该客户端的信任证书在服务器是存在的,如果A系统的信息用户,需要在B系统也支持,那么只需要把A系统的证书在B系统也导一份,这样就支持A/B系统的互相访问了,使用证书支持免登陆.

wps_clip_image-31279[3][1]

可以检测只允许证书登陆.

发表评论