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,这时会出现不信任的连接,
必须在浏阅器加载根证书:
导入上面生成的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,这时会出现不信任的连接,如下图:
必须要Firefox浏阅器在加载客户端证书:
选择上面生成的client.p12
可以查看证书的内容:
再一次打开https://www.smed.net:8443,会出现如下窗口,按“确定”即可