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
keytool -list -v -keystore D:\keystore\tomcat\tomcat.keystore -storepass changeit
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
keytool -list -v -keystore D:\keystore\tomcat\client.p12 -storetype PKCS12 -storepass changeit
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
keytool -printcert -file D:\keystore\tomcat\client.cer
5 客户端信任证书导入到服务器证书库 [双向认证]
[如果客户端没有导入到服务器,双向认证的时候需要保存]
keytool -import -v -alias client -file D:\keystore\tomcat\client.cer -keystore D:\keystore\tomcat\tomcat.keystore -storepass changeit
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
8 服务端接收到客户端请求,验证私钥[双向认证]
客户端认证,允许同意服务端证书[单向认证]
服务端认证,当客户端同意服务端证书时,再发放客户端个人证书进行安装,用户安装完证书后,就可以自动完成登陆证书了.
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浏览器提示如下:
点击添加例外,可以查看我们的证书
10、客户端证书安装
如果是IE浏览器的话,双击D:\keystore\tomcat\client.p12 就可以安装成功了
如果是firefox的话,可以手工导入
如果要实现双向认证,则需要在Ie/FireFox除了安装client.p12外,还需要安装server.cer
按照提示安装证书,将证书填入到“受信任的根证书颁发机构”[客户端信息服务端证书]
[以前单向认证[服务端信用客户端证书]]
这不就是我们创建的自签名的公钥证书吗?
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功能了。
如何为客户端装trust keyStore
如果双向认证,比如新增一个用户,需要用户下载证书,并把证书以某种key生成并放到服务器的keystore中,这样用户在客户端生成时,就需要输入某种key就可以成功导入证书.
12、多系统双向认证(Https默认端口为443)
当用户安装了客户端证书,那么该客户端的信任证书在服务器是存在的,如果A系统的信息用户,需要在B系统也支持,那么只需要把A系统的证书在B系统也导一份,这样就支持A/B系统的互相访问了,使用证书支持免登陆.
可以检测只允许证书登陆.