如何配置Tomcat以支持SSL
如何配置Tomcat 以支持SSL1、技术背景SSL(Server Socket Layer)简介在网络上信息在源-宿的传递过程中会经过其它的计算机。一般情况下,中间的计算机不会监听路过的信息。但在使
如何配置Tomcat 以支持SSL
1、技术背景
SSL(Server Socket Layer)简介
在网络上信息在源-宿的传递过程中会经过其它的计算机。一般情况下,中间的计算机不会监听路过的信息。但在使用网上银行或者进行信用卡交易的时候有可能被监视,从而导致个人隐私的泄露。由于Internet 和Intranet 体系结构的原因,总有某些人能够读取并替换用户发出的信息。随着网上支付的不断发展,人们对信息安全的要求越来越高。因此Netscape 公司提出了SSL 协议,旨在达到在开放网络(Internet)上安全保密地传输信息的目的,这种协议在WEB 上获得了广泛的应用。 之后IETF(www.ietf.org)对SSL 作了标准化,即RFC2246,并将其称为TLS (Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小。
SSL 工作原理
SSL 协议使用不对称加密技术实现会话双方之间信息的安全传递。可以实现信息传递的保密性、完整性,并且会话双方能鉴别对方身份。不同于常用的http 协议,我们在与网站建立SSL 安全连接时使用https 协议,即采用https://ip:port/的方式来访问。
当我们与一个网站建立https 连接时,我们的浏览器与Web Server之间要经过一个握手的过程来完成身份鉴定与密钥交换,从而建立安全连接。具体过程如下:
1. 用户浏览器将其SSL 版本号、加密设置参数、与session 有关的数据以及其它一
些必要信息发送到服务器。
2. 服务器将其SSL 版本号、加密设置参数、与session 有关的数据以及其它一些必
要信息发送给浏览器,同时发给浏览器的还有服务器的证书。如果配置服务器的
SSL 需要验证用户身份,还要发出请求要求浏览器提供用户证书。
3. 客户端检查服务器证书,如果检查失败,提示不能建立SSL 连接。如果成功,那
么继续。
4. 客户端浏览器为本次会话生成pre-master secret ,并将其用服务器公钥加密后发
送给服务器。
5. 如果服务器要求鉴别客户身份,客户端还要再对另外一些数据签名后并将其与客户
端证书一起发送给服务器。
6. 如果服务器要求鉴别客户身份,则检查签署客户证书的CA 是否可信。如果不在信
任列表中,结束本次会话。如果检查通过,服务器用自己的私钥解密收到的
pre-master secret,并用它通过某些算法生成本次会话的master secret。
7. 客户端与服务器均使用此master secret 生成本次会话的会话密钥(对称密钥) 。在
双方SSL 握手结束后传递任何消息均使用此会话密钥。这样做的主要原因是对称
加密比非对称加密的运算量低一个数量级以上,能够显著提高双方会话时的运算速
,度。
8. 客户端通知服务器此后发送的消息都使用这个会话密钥进行加密。并通知服务器客
户端已经完成本次SSL 握手。
9. 服务器通知客户端此后发送的消息都使用这个会话密钥进行加密。并通知客户端服
务器已经完成本次SSL 握手。
10. 本次握手过程结束,会话已经建立。双方使用同一个会话密钥分别对发送以及接受
的信息进行加、解密。
2、Java 环境配置
2.1 JSSE: Java SSL extension
用来支持Java 程序的SSL 。
2.2 Keystore
Java 把密钥、证书等都放到一个文件中,并且一个文件可以放多个密钥对和证书信息,并用别名alias 来区分不同的密钥和证书,存放这些信息的文件叫做keystore 。
2.3 Keytool
JDK 自带的用于管理keystore 的工具,具有密钥生成、导入、导出,证书生成、导入、导出等强大的功能。
2.4 安装配置
确定已安装有JDK1.2以上版本(java -version);如果你的机器安装了jdk1.4 以上版本(集成了SSL 、keystore 和keytool ),则可略过下面的步骤。
下载JSSE ,URL: (注意,JDK1.4以
上版本已经集成JSSE 了,不需要再下载) ,一般来说都只能download 全球版本(还有个版本是美国/加拿大版本,加密位数没有限制);
安装JSSE ,主要是把JSSE 包内的lib/*.jar拷贝到JA V A_HOME/jre/lib/ext/下,并且
加入到CLASSPA TH 中 (这一步很重要) ;
编辑JA V A_HOME/jre/lib/security/java.security文件,主要是添加:
security.provider.1=sun.security.provider.Sun (一般系统本来就有这一行)
(注意数字2应该是你的系统security.provider.2=com.sun.net.ssl.internal.ssl.Provider
确定你的系统有下面文件的其中一个:
1) JA V A_HOME/jre/lib/security/jssecacerts或者
2) JA V A_HOME/jre/lib/security/cacerts 原有的最大provider 数再加一,不一定是2;但一般把它的优先级设为2,而改其它的)
3、申请服务器证书过程
申请服务器证书过程如下:
建立保存证书相关信息的目录
如:e:myServerCert。
在dos 窗口中敲入以下命令生成keystore 文件,如图一所示
%java_homebinkeytool -genkey -alias tomcatTest -keyalg RSA -size 2048 -keystore e:myServerCertserverKey.keystore
,说明:
将提示您输入保护keystore 的密码,至少为六位。
注意问题:姓氏可输入域名,中国的国家代码是:CN
-lias tomcatTest 中的tomcatTest 为别名 可以任意输入
请到e:myServerCert 目录下确认是否生成文件 serverKey.keystore
没有-size 2048的指定,默认产生的是2048位的密钥对

图一
产生certificate signature request (CSR) 用来向CA 颁发机构申请有效
的服务器证书
%java_homebinkeytool –certreq -keyalg RSA -alias tomcatTest -file e:myServerCert �rtreq.csr -storepass lxz2003 -keystore e:myServerCertserverKey.keystore
命令行的说明:
-alias tomcatTest 在生成.keystore 的别名
-storepass 访问.keystore 的密码
-file certreq.csr 生成证书请求存放的文件
在e:myServerCert目录下找到certreq.csr 文件用文本编辑器(如notepad.exe 、ultraedit.exe )打开(注意千万不要改变其中的内容或用word 等带有一定格式的字处理软件编辑或存储以上信息。)文件内容类似如下:
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIBqjCCARMCAQAwajELMAkGA1UEBhMCQ04xEjAQBgNVBAgTCWd1YW5nZG9u c2hlbnpoZW4xDzANBgNVBAoTBmJ5dHRlcjEPMA0GA1UECxMGYnl0dGVyMRIwEAY MC4wLjEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALKNsefgVD4KhkgKfY PP7ctq4wMqR807Q joeqqu78hwD4Dd8I4R7Fg6pl6GGMhuOVG s7j59Qf s9pdUM/Sj5ex IM5skhiYSsIgsDWMY/mMl2u212AeNKxR2bzRrWtT0OUv1yHvCmE6CmifqKce51R3Ag BgkqhkiG9w0BAQQFAAOBgQBOq79Rhmt2yo1B2ezUBAv6ieyMLGvYxDID/ SU8UpKw0 rpdpPEQjOPKDnQW1gXyU5zxheWMCh7K4p/r2NNf2cvzs3hGvESwx2/cjDo2q246EoZqy/ LfaUqDbvqCEVS29Z/0tL h6GEcsQU /P6wVvOZ0MFA==
,-----END NEW CERTIFICATE REQUEST-----
登陆到CFCA 网站提交证书请求,下载证书
得Web Server证书的参考号和授权码后,访问CFCA 统一下载平台(生产系统,测试系统:)。

进入界面后,如果没有下载CA 证书链的话,可以在该页面上先点击下载证书链(详细介绍见本章4.2),然后点击“Web 服务器证书下载”

选择“接受此协议”进入下载界面,输入参考号和授权码,并在“选项”中选择返回的证书的数据格式。例如选择DER (默认的方式),把前面得到的PKCS#10格式证书请求(certreq.csr 中的内容)粘贴到下面的文本框。

提交该表单,证书将被产生并返回。

保存证书到指定目录,证书申请完成
,5、安装下载CFCA 测试证书链
在在证书下载平台(测试系统:


产系统http://www.cfca.com.cn/tongyi/)选择证书链下载,
下载根证书链(将CFCA ROOT CA及CFCA OPERATION CA2下的内容分被保存为文件),即获得b_Cert.zip
或者直接在CFCA 网站上下载证书链(选择APACHE 用户下载):http://www.cfca.com.cn/zhengshu/zhengshu.htm#2
解压b_Cert.zip(生产系统)后,可以看到文件Root_CA.cer,Operation_CA2.cer。 解压b_Tcerts.zip(测试系统)后,可以看到文件CFCARCA.cer ,CFCATESTCA.cer 。 以生产系统为例:1744307125
导入可信任的根证书到你的.keystore 文件中
%java_homebinkeytool -import -alias root –storepass changeit -keystore
%java_home jrelibsecurity�certs -trustcacerts -file C:Downloadsb_TcertsRoot_CA.cer(如果是测试系统就是CFCARCA.cer )
导入可信任的中级证书到你的.keystore 文件中
%java_homebinkeytool -import -alias ca2 –storepass changeit -keystore
java_home jrelibsecurity�certs -trustcacerts -file C:Downloadsb_Tcerts Operation_CA2.cer(如果是测试系统就是CFCATESTCA.cer )
导入刚申请的服务器证书到你的.keystore 文件中
%java_homebinkeytool -import -alias tomcatTest -storepass lxz2003 -keystore
,e:myServerCertserverKey.keystore -trustcacerts -file e:myServerCertservercert.cer
注意:-storepass 、-keystore 后面的参量与导入CA 证书的时候不同!!!
验证keystore 中的key pairs 和CA 的有效性
%java_homebinkeytool -list –v -alias tomcatTest –storepass lxz2003 -keystore e:myServerCertserverKey.keystore
屏幕输出如下,图十。

图十
6、配置服务器(TOMCAT )开启SSL 服务
6.1 修改tomcat 配置文件server.xml
打开TOMCAT 安装目录的confserver.xml文件找到如下文本,取消注释,添加下面的红色标注内容:
port="8443" minProcessors="5" maxProcessors="75" enableLookups="true" acceptCount="100" debug="0" scheme="https" secure="true" useURIValidationHack="false" disableUploadTimeout="true"> clientAuth="true" protocol="TLS" />
TOMCAT5.5按照如下配置:
maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" truststoreFile="H:�caratrust.keystore"——证书链文件,相当于前文的cacerts 文件。 truststorePass=" keystoreFile="H:�caraserverssl.keystore" ——服务器证书文件, ——相当于前文的serverKey.keystore 文件 keystorePass="" >
由于tomcat 不同版本在配置服务器证书的部分有可能有不同,所以把我们已知的tomcat 版本配置的情况补充在附录,作为参考。
clientAuth="true":要求客户端必须出示证书,双向SSL ;
clientAuth="want":客户端可以出示证书也可以选择不出示证书,单双向SSL ; clientAuth="true":客户端无须出示证书,单向SSL 。
6.2 测试服务器证书是否成功安装
重新启动TOMCA T, 打开IE 浏览器在地址栏内输入:https://127.0.0.1:8443/index.jsp出现如下页面表示TOMCA T 服务器证书配置成功,图十一
,
图十一
圈选部分双击可显示证书信息。
如果在TOMCAT 的server.xml 配置中将clientAuth="false"改为“true ”,则客户端必须申请客户端证书,如没有客户端证书则被拒绝访问(最好设置为true )显示如下页面,图十二。

图十二
7附录
由于tomcat 不同版本在配置服务器证书的部分有可能有不同,所以把我们已知的tomcat 版本配置的情况补充在此,作为参考。
7.1 Tomcat6.0 SSL的配置
1. 参考:
Tomcat 6.0 自带的文档docs/ssl-howto.html,详细介绍了配置过程。
2. 目的:
以下详细描述配置过程,仅作为备忘录。
3. 备忘录:
Step1,安装tomcat 6.0.18,此为当前最新版本,需JDK5.0或以上。
l JDK 安装后,可以在命令行下使用如下命令检测是否成功。
C:Documents and Settingsnew>java -version
java version "1.6.0_10"
Java(TM) SE Runtime Environment (build 1.6.0_10-b33)
Java HotSpot(TM) Client VM (build 11.0-b15, mixed mode, sharing)
看到以上蓝色信息,则表示JDK 安装配置成功。
l Tomcat 的运行需要配置JDK_HOME和JRE_HOME环境变量,JRE_HOME默认等于JDK_HOME的值。
Step2,创建服务器端certificate keystore和自签名certificate 。
在命令行下使用如下命令:
C:Documents and Settingsnew>keytool -genkey -alias mykey -keyalg RSA -keystore
server.keystore
输入keystore 密码:123456
再次输入新密码:123456
您的名字与姓氏是什么?
[Unknown]: dinstone
您的组织单位名称是什么?