如何配置Tomcat以支持SSL
木子(blog.csdn.net/luckybeggar)
MSN:[email protected]
-------------------------------------
既然选择了远方,便只顾风雨兼程!
名词解释:
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 JSSE: Java SSL extension
用来支持Java程序的SSL;
3 Keystore
Java把各种钥匙对key pair、验证certification等都可以放到一个文件中,并且一个?文件可以放多个钥匙对和验证信息,并用别名alias来区分不同的key pair/certification。??? 存放这些信息的文件叫做keystore;
4 Keytool
JDK自带的用于管理keystore的工具
安装准备:
1. 确定已安装有JDK1.2以上版本(java -version);如果你的机器安装了jdk1.4 以上版本可以不必以下准备。
2. 下载JSSE,URL: http://java.sun.com/products/jsse/index-102.html (注意,JDK1.4以上版本已经集成JSSE了,不需要再下载),一般来说都只能download全球版本(还有个版本是美国/加拿大版本,加密位数没有限制);
3. 安装JSSE,主要是把JSSE包内的lib/*.jar拷贝到JAVA_HOME/jre/lib/ext/下,并且加入到CLASSPATH中 (这一步很重要);
4. 编辑JAVA_HOME/jre/lib/security/java.security文件,主要是添加:
security.provider.1=sun.security.provider.Sun (一般系统本来就有这一行)
security.provider.2=com.sun.net.ssl.internal.ssl.Provider (注意数字2应该是你的系统原有的最大provider数再加一,不一定是2;但一般把它的优先级设为2,而改其它的)
5.确定你的系统有下面文件的其中一个:
1 JAVA_HOME/jre/lib/security/jssecacerts或者
2 2) JAVA_HOME/jre/lib/security/cacerts
申请服务器证书
1 建立保存证书相关信息的目录
如:c:/myServerKey
2在dos窗口中敲入以下命令生成.keystore文件
%java_home%/bin/keytool -genkey -alias tomcatTest -keyalg RSA -keystore c:/myServerKey/serverKey.keystore
将提示您输入保护keystore 的密码
注意问题 : 姓氏可输入域名,中国的国家代码是:CN
-lias tomcatTest 中的tomcatTest 为别名 可以任意输入
请到 c:/myServerKey 目录下确认是否生成文件 serverKey.keystore
图片1
3产生certificate signature request (CSR) 用来向CA颁发机构申请有效的服务器证书:
%java_home%/bin/keytool –certreq -keyalg RSA -alias tomcatTest -file c:/myServerKey/certreq.csr -storepass lxz2003 -keystore c:/myServerKey/serverKey.keystore
命令行的说明:
-alias tomcatTest 在生成.keystore的别名
-storepass 访问.keystore 的密码
-file certreq.csr 生成证书请求存放的文件
在c:/myServerKey目录下找到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-----
4 登陆到CA颁发机构的网站提交证书请求,注册相关信息,生成服务器证书(本说明演示申请测试版服务器证书的过程,申请网站:http://www.cnca.net)。
进入图中圈选的页面申请服务器端证书。
图片2
第一次申请需安装证书链,安装完证书链后按屏幕提示继续。
图片3
填写基本资料:(注意域名或ip、管理员的Email地址)
图片4
填写其他信息和联系信息:(注意web服务器类型为Apache)
图片5
提交证书请求信息:
把上面生成的证书请求文本拷贝粘贴到文本框中(certreq.csr)。
图片6
获得业务受理号:
图片7
凭管理员邮箱中的业务受理号、密码安装证书:
图片8
保存证书到指定目录,证书申请完成。
图片9
5 安装服务器证书颁发CA的证书链:
证书链的文件为ServerRoot.p7b,双击该文件导出证书链中的个CA证书,选择其中的一个证书右键选择所有任务中的导出一项。
图片10
按屏幕提示操作(注意:证书的导出格式选择为:Base64 编码 X.509 (.cer))。
图片11
选择保存的路径,文件名(如RootCa.cer),完成导出操作,同样导出另一张证书存储为(ServerCA.cer)
6导入可信任的根证书链到你的.keystore文件中:
%java_home%/bin/keytool -import -alias root –storepass changeit -keystore
%java_home% /jre/lib/security/cacerts -trustcacerts -file RootCA.cer
7导入可信任的server ca到你的.keystore文件中:
%java_home%/bin/keytool -import -alias serverca –storepass changeit -keystore
% java_home% /jre/lib/security/cacerts -trustcacerts -file ServerCA.cer
8导入刚申请的服务器证书到你的.keystore文件中:
%java_home%/bin/keytool -import -alias tomcatTest -storepass lxz2003 -keystore c:/myServerKey/serverKey.keystore -trustcacerts -file Server.cer
9 验证keystore 中的key pairs 和CA的有效性:
%java_home%/bin/keytool -list –v -alias tomcatTest –storepass lxz2003 -keystore c:/myServerKey/serverKey.keystore
屏幕输出如下:
图片12
9 配置服务器(TOMCAT)开启SSL服务
打开TOMCAT安装目录的/conf/server.xml文件找到如下文本取消注释并做如下修改:
port="8443" minProcessors="5" maxProcessors="75"
enableLookups="true"
acceptCount="10" debug="0"
scheme="https" secure="true"
useURIValidationHack="true">
clientAuth="false" protocol="TLS"
keystoreFile="c:/myServerKey/serverKey.keystore" keystorePass="lxz2003" />
说明:
属性 | 描述 |
| 实现类名,不要更改默认值 |
| True:客户端访问SSL需提供客户端证书,false 可以不提供 |
| .keystore文件的位置 |
| 访问.keystore的密码 |
| 加密/解密使用的协议,不要修改默认值 |
10 测试服务器证书是否成功安装
重新启动TOMCAT,打开IE浏览器在地址栏内输入:https://127.0.0.1:8443/index.jsp出现如下页面表示TOMCAT服务器证书配置成功:
图片13
圈选部分双击可显示证书信息:
图片14
如果在TOMCAT的server.xml配置中将clientAuth="false" 改为“true”,则客户端必须申请客户端证书,如没有客户端证书则被拒绝访问(最好设置为true)显示如下页面:
图片15
如何申请客户端证书
1 安装客户端CA证书链
登陆到http://www.cnca.net使用IE浏览器下载客户端证书(客户端证书指个人证书,单位证书,单位员工证书)的证书链,CA系统会自动将证书链安装的系统中。
图片16
点击安装证书链,提示信息要选择“是”:
图片17
显示证书链安装成功,网站要求你输入申请信息:
图片18
选择加密服务提供程序及密钥长度:
如果你的私钥和数字证书安装到本地计算机,则可按图中选取(Microsoft Base Cryptographic Provider 1.0 或 Mircrosoft Enhanced Cryptographic Proveder 1.0),密钥长度最好选择1024
如果使用其他外设存储私钥和数字证书请参照后面的表格选择合适的选项:
图片19
图片20
填写好补充信息后按继续,弹出的警告框时选择“是“:显示业务受理号,选择”安装证书“,打开你申请时填写的EMAIL地址,找到业务处理号,密码填入页面输入框中弹出的警告框时选择“是“,继续安装证书,会提示证书已安装成功。
你可以打开IE浏览器的“工具“-》”INTERNET选项“-》”内容“-》”证书“中会存在一张个人证书,至此客户端证书安装成功,你可以通过https://ip:8443
访问应用程序。
图片21
获得业务受理号:
图片22
显示证书信息和警告框:
图片23
证书下载成功:
图片24
确认证书以安装到系统中:
图片25
收集整理:木子
既然选择了远方,便只顾风雨兼程
(完)