使用openssl配置tomcat ssl证书

时间:2024-04-14 07:50:57

      Tomcat既可以作为独立的Servlet容器,也可以作为其他HTTP服务器附加的Servlet容器。如果Tomcat在非独立模式下工作,通常不必配置SSL,由它从属的HTTP服务器来实现和客户的SSL通信。Tomcat和HTTP服务器之间的通信无须采用加密机制,HTTP服务器将解密后的数据传给Tomcat,并把Tomcat发来的数据加密后传给客户。

    如果Tomcat作为独立的Java Web服务器,则可以根据安全需要,为Tomcat配置SSL,它包含以下两个步骤:
(1) 准备安全证书。
(2) 配置Tomcat的SSL连接器(Connector)。

 

一、使用openssl生成证书文件

 

1.OpenSSL安装及准备工作

 

   (1)下载最新的OpenSSL安装包,并解压

    tar -xf openssl.XX.tar.gz

    编译安装

   ./config

   make

   make install

   默认安装在/usr/local/ssl目录下

 

  (2)准备相关目录

    cd /usr/local/ssl

    mkdir certs

    mkdir newcerts

    mkdir crl

    touch index.txt

    echo 01>serial

 (3)生成随机数

    openssl rand -out private/.rand 1000

 

2.生成根证书

 

(1)生成私钥

openssl genrsa -aes256 -out private/cakey.pem 1024

(2)生成根证书签发申请
openssl req -new -key private/cakey.pem -out private/ca.csr

(3)根证书签发
openssl x509 -req -days 365 -sha1 -extensions v3_ca -signkey private/cakey.pem -in private/ca.csr -out certs/ca.cer

 

3.签发服务端证书

 

(1)生成私钥

openssl genrsa -aes256 -out private/server-key.pem 1024

(2)生成服务端签发申请
openssl req -new -key private/server-key.pem -out private/server.csr

 

注意:服务端证书中的Common Name(cn)是你要发布网站的域名,如www.smed.cn

 

(3)服务端证书签发
openssl x509 -req -days 365 -sha1 -extensions v3_req -CA certs/ca.cer -CAkey private/cakey.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certs/server.cer

 

 

 

4.签发客户端证书

(1)生成私钥

openssl genrsa -aes256 -out private/client-key.pem 1024

(2)生成客户端签发申请
openssl req -new -key private/client-key.pem -out private/client.csr

(3)客户端证书签发
openssl x509 -req -days 365 -sha1 -CA certs/ca.cer -CAkey private/cakey.pem -CAserial ca.srl -in private/client.csr -out certs/client.cer

 

注意:客户端证书中的Common Name(cn)是你要发布网站的域名(和服务端一致),如www.smed.cn(后面的双向认证要使用)

 

5.证书的使用

 

    使用OpenSSL生成的数字证书和私钥,如需要在Java或Tomcat环境下使用,需要先装其转换成PKCS#12编码格式的**库,才能使用keytool工具进行相应的管理。转换命令如下:

 

openssl pkcs12 -export -clcerts -name lxh -inkey private/client-key.pem -in certs/client.cer -out client.p12


openssl pkcs12 -export -clcerts -name lxh -inkey private/server-key.pem -in certs/server.cer -out server.p12

 

信任证书的生成:

keytool -importcert -trustcacerts -alias www.smed.net -file certs/ca.cer -keystore ca-trust.p12

 

keytool工具查看:

 

keytool -list -keystore client.p12 -storetype pkcs12 -v

 

 二、Tomcat 单向认证的配置

 

 打开tomcat的配置文件

vim conf/server.xml

 

增加或修改如下内容:

    <Connector port="8443" protocol="HTTP/1.1"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" 
		keystoreFile="/usr/local/ssl/server.p12"
                keystoreType="pkcs12"
                keystorePass="12345678"
		/>

 

由于上面server证书的Common Name(cn)设置为www.smed.net

 

所以必须在/etc/hosts文件增加此域名的映谢:

vim /etc/hosts

增加如下内容:

127.0.0.1 www.smed.net

打开网站:

在Firefox浏阅器打开:https://www.smed.net:8443,这时会出现不信任的连接,


使用openssl配置tomcat ssl证书
 

 

必须在浏阅器加载根证书:

 

 


使用openssl配置tomcat ssl证书
 

 

导入上面生成的CA根证书ca.cer。

 

这时再打开https://www.smed.net:8443,就显示此网站是安全的。

 

 三、tomcat双向认证的配置

 打开tomcat的配置文件

vim conf/server.xml

 

增加或修改如下内容:

    <Connector port="8443" protocol="HTTP/1.1"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="true" sslProtocol="TLS" 
		keystoreFile="/usr/local/ssl/server.p12"
                keystoreType="pkcs12"
                keystorePass="12345678"
		truststoreFile="/usr/local/ssl/ca-trust.p12"
                truststoreType="jks"
                truststorePass="12345678"
		/>

 

打开网站:

在Firefox浏阅器打开:https://www.smed.net:8443,这时会出现不信任的连接,如下图:


使用openssl配置tomcat ssl证书
 

必须要Firefox浏阅器在加载客户端证书:

 

 

 
使用openssl配置tomcat ssl证书
 

选择上面生成的client.p12

可以查看证书的内容:

 


使用openssl配置tomcat ssl证书
 

 

再一次打开https://www.smed.net:8443,会出现如下窗口,按“确定”即可


使用openssl配置tomcat ssl证书