Tomcat和Openssl构建HTTPS双向认证(

一、创建服务器证书、客户端证书以及CA

环境系统为RedHat AS4 Update4,openssl版本为OpenSSL 0.9.7a Feb 19 2003,应该是系统自带版本。
拷贝openssl.cnf文件到当前目录,按照openssl.cnf文件中配置需要在当前目录下建立几个文件和文件夹,有./demoCA/  ./demoCA/newcerts/  ./demoCA/index.txt  ./demoCA/serial,在serial文件中写入第一个序列号“01”。然后执行以下操作:

1、生成服务器端私钥和证书请求

生成不带口令服务器端私钥server.key
openssl genrsa -out server.key 1024

生成服务器端证书请求 server.csr
openssl req -new -key server.key -out server.csr -config openssl.cnf

 

2、同样生成客户端私钥和请求

openssl genrsa -des3 -out privatekey.key 1024  
openssl req -new -key privatekey.key -out privatekey.csr -config openssl.cnf


3、生成CA

key口令111111,有效期1095天

openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf -days 1095

 

4、通过CA签发证书

签发服务器端证书server.crt
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
 
签发客户端端证书privatekey.crt
openssl ca -in privatekey.csr -out privatekey.crt -cert ca.crt -keyfile ca.key -config openssl.cnf 

 

5、生成pem格式证书

有时需要用到pem格式的证书,可以用以下方式合并证书文件(crt)和私钥文件(key)来生成:
$ cat privatekey.crt privatekey.key> privatekey.pem
$ cat server.crt server.key > server.pem

 

6、生成pkcs12格式证书

在tomcat中实现双向认证有时需要pkcs12格式的证书(该证书包含根证书、服务器端或客户端的证书和密钥文件),用以下方法生成:

生成pkcs12服务器证书tomcat.p12,export密码用111111,该密码在导入证书时会用到
openssl pkcs12 -export -in server.crt -inkey server.key  -out tomcat.p12 -name tomcat -CAfile ca.crt  -caname root -chain 

生成pkcs12客户端证书client1.p12,export密码用111111,该密码在导入证书时会用到
openssl pkcs12 -export -in privatekey.crt -inkey privatekey.key -out client1.p12 -name client1 -chain -CAfile ca.crt


到此我们创建了将会用到的文件和证书:
客户端:私钥privatekey.key、证书privatekey.crt 、pem格式的证书privatekey.pem、pkcs12格式的证书client1.p12
服务器端:私钥server.key、证书server.crt、pem格式的证书server.pem、pkcs12格式的证书tomcat.p12
CA:根密钥ca.key、根证书ca.crt

 

二、tomcat实现双向认证

按照以上方法证书生成后,我们再配置TomCat即可实现双向认证。此时服务器端我们只用到服务器端pkcs12格式的证书tomcat.p12和CA的根证书ca.crt即可,客户端用到pkcs12格式的证书client1.p12,具体如下:

 

首先将以上创建的证书server.crt和tomcat.p12拷贝到tomcat主目录下的conf文件夹下。

 

1. 创建服务器信任的CA证书库:
把ca.crt证书导入信任证书库,命令行模式进入tomcat主目录下的conf目录,执行以下命令:

keytool -keystore truststore.jks -keypass 111111 -storepass 111111 -alias ca -import -trustcacerts -file ca.crt
 
可以用以下命令查看信任证书库内容:
keytool -keystore truststore.jks -keypass 111111 -storepass 111111 -list -v
 
2. 配置Tomcat支持HTTPS双向认证(服务器将认证客户端证书):
修改tomcat的conf目录里的server.xml文件($TOMCAT_HOME/conf/server.xml),找到类似下面内容的配置处,添加配置如下:
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" debug="0" scheme="https" secure="true"
               clientAuth="true" sslProtocol="TLS"
               keystoreFile="conf/tomcat.p12" keystorePass="111111" keystoreType="PKCS12"
               truststoreFile="conf/truststore.jks" truststorePass="111111" truststoreType="JKS" />
 
经以上配置后,重启tomcat,服务器就支持HTTPS双向认证了。
客户端导入client1.p12 证书,windows系统双击安装即可,通过浏览器https方式访问服务器的web时会提示选择证书。
注意:浏览器的高级选型中要启用TLS加密方式。

 以上是参照如下两个blog整理而成

http://blog.csdn.net/darkstar21cn/archive/2005/06/11/392492.aspx

http://blog.csdn.net/jasonhwang/archive/2008/04/29/2344768.aspx

你可能感兴趣的:(tomcat,服务器,scheme,浏览器,redhat,windows)