如何配置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

您的组织单位名称是什么?

标签: