经过前面两篇文章HttpClient访问https链接(一)HttpClient访问https链接(二)的介绍,本来计划的第三篇应该是介绍Android端的双向认证,但是由于双向认证的实现,必须服务端和客户端都开启双向认证才真正有意义,所以第三篇文章我将会介绍如何利用keystore配置tomcat7的双向认证环境。

证书库、证书的生成

生成服务器证书库

1
keytool -validity 36500 -genkey -v -alias tomcat -keyalg RSA -keystore tomcat.keystore -dname "CN=www.ilovn.com,OU=,O=,L=,ST=,c=" -storepass 123456 -keypass 123456

-validity 36500 有效期,以天为单位
CN 服务器的域名或者IP地址
OU 组织单位
O 组织
L 区域
ST 州/省份
C 国家

客户端证书

1
keytool -validity 36500 -genkeypair -v -alias client -keyalg RSA -storetype PKCS12 -keystore client.p12 -dname "CN=client,OU=,O=,L=,ST=,c=" -storepass 123456

-storetype PKCS12 主要是为了将证书导入浏览器中。
将生成的证书导入浏览器中。

将客户端证书导入服务器端证书库

将客户端证书导出 CER格式证书,然后将CER格式证书导入到服务器端证书中。

1
keytool -export -alias client -keystore client.p12 -storetype PKCS12 -storepass 123456 -rfc -file client.cer

将client.cer 导入到服务器证书库

1
keytool -import -alias client -v -file client.cer -keystore tomcat.keystore -storepass 123456

从服务器证书库导出服务器证书(可选)

1
keytool -export -alias tomcat -keystore tomcat.keystore -storepass 123456 -rfc -file tomcat.cer

该证书可以导入浏览器中,让客户端信任服务器证书。不导入也不影响使用,但浏览器会不信任服务器证书,会提示错误信息。

查看证书库中的所有证书

1
keytool -list -keystore tomcat.keystore -storepass 123456

Tomcat 配置

配置 server.xml

1
2
3
4
5
6
7
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="D:\ssl\tomcat.keystore"
keystorePass="123456"
truststoreFile="D:\ssl\tomcat.keystore"
truststorePass="123456"
clientAuth="true" sslProtocol="TLS" />

启动Tomcat,访问测试一下。