Tomcat实现SSL的步骤

来源:互联网

在网络上,信息在传递过程中会经过其他计算机.一般情况下它不会监听信息内容.但在网上使用网上银行或等交易的时候可能被监视,从而导致信息泄露.这时候就要应用SSL;

SSL是一种保证在网络上的两个节点之间进行安全通信的机制.它可以用来建立安全的连接.网络通信协议如HTTP,IMAP都可以采用SSL.采用了SSL的HTTP协议叫:HTTPS.HTTP默认端口是80;HTTPS端口是443.

网上购物时,安全隐患主要有两种:

1. 客户的银行卡等信息被别人截获.

2. 客户访问的是非法站点,专门从事诈骗活动.

SSL使用加密技术实现会话对方信息的安全传递,可以实现信息传递的保密性和完整性,并且会话双方能够鉴别对方的身份.

加密通信

Web之间的通信可以被监视,SSL使用加密对双方的信息进行加密.所以就算被截获了,它没有密钥也无法解密.多数浏览器支持40位或128位的加密或两者都支持,而服务器只有在安装了安全证书后才可以加密通信.

安全证书

除了对信息加密.SSL还采用身份认证机制.确保通信双方都可以验证双方的真实身份.它和现实中的身份证类似.身份证由国家权威机构颁布发,且不允许伪造.

SSL通过安全证书来证明WEB客户或WEB服务器的身份.当客户通过安全的连接与服务器通信时,服务器会先向客户出示它的安全证书.以证明这个站点是安全的.而且用户请求的就是这个站点.在B2B事务中,服务器还会要求客户出示安全证书.以便核实客户的身份.大多数情况下不会要.

获取安全证书有两种途径:一种是从权威机构购买.一个是创建自我签名的证书.

1. 从权威机构购买.

该证书由加密技术制作而成,几乎无法伪造.由国际权威的证书机构CA(Certificate Authority)和VeriSign(www.verisign.com)和Thawte(www.thawte.com)颁发.申请时要交钱.而且一个证书只能对应一个IP.

2. 创建自我签名的证书

有时候通信双方只关心网络上的安全传输,不需要进行身份验证.这样就可以创建自我签名(self-assign)的证书.比如SUN公司提供的keytool就可以产生这样的证书.

SSL工作原理

SSL采用公钥加密技术.使用一对非对称的密钥加密或解密.每一对密钥都由公钥和密钥组成.公钥被广泛发布,私钥是隐秘的,不公开.公钥加密的数据只能用私钥解密.反过来,私钥加密的数组也只能用公钥解密.

安全证书中包含了这一对非对称的密钥.只有安全证书的所有者才知道私钥.当你将自己的证书发给别人时,实际上是将你的公钥发给他们了.这样他们就可以用公钥加密,然后将信息发给你,你就可以用私钥解密.

当用户用HTTPS访问站点时,如:https://aaa.aa.aa站点将自动向客户发送他的安全证书,即公钥.在客户与服务器进行SSH握手阶段,采用非对称加密的方法传递数据,就是上面说的那样.由此建立一个安全的会话.接下来就用对称加密方法来传递实际的通信数据.

下面是一个交互过程:

1. 用户在浏览器里访问站点;这时,浏览器将自己的SSL版本号,加密设置参数,与session有关的数据以及其它一些必要的信息发送到服务器.

2. 服务器将自己的SSL版本号,加密设置参数,Session相关数据等发送给浏览器.同时发送给浏览器的还有服务器的证书.如果服务器的SSL需要验证用户身份,还会发出出请求要求浏览器提供用户证书.

3. 客户检查服务器证书,如果检查失败,就提示不能建立SSL连接.如果成功,继续下一步:

4. 客户端浏览器为本次会话生成预备主密码(pre-master secret),并将其用服务器SSL证书中的公钥加密后发送给服务器.

5. 如果服务器要求验证客户的身份,客户还要再对另一些数据签名也发送给服务器.

6. 如果服务器是要求验证客户身份的.服务器会检查用户的证书CA是否可信.如果不在信任列表中,结束会话.

7. 如果检查通过或根本不需要验证客户身份的.则服务器用私钥解密客户发过来的预备主密码(pre master secret), 并用某些算法生成本次会话的主密码(master secret).

8. 客户端和服务端都使用此主密码作为本次通话的密钥(对称密钥).这样做是因为对称加密比非对称加密快N多.

证书简介

证书是有助于验证个人身份或网站标识的数字文档。证书是由名为“证书颁发机构”的公司颁发的。可以使用证书来帮助保护 Internet 上的个人身份信息,并使计算机免遭不安全软件的危害。

Internet Explorer 使用两种不同类型的证书:

“个人证书”帮助验证您自己的身份。在通过 Internet 将个人信息发送到需要用证书验证身份的网站时需要该信息。您可以通过在计算机上创建一个私钥来帮助控制对您的身份的使用。当用于电子邮件程序时,带有私钥的安全证书也称作“数字标识”。

“网站证书”帮助确定特定网站是否非假冒。它有助于防止另一个网站采用原始安全网站的标识。通过 Internet 发送个人信息时,最好检查一下网站的证书,确保您正在同预期的网站进行通信。在从网站下载软件时,可以查看证书,以帮助验证软件来自已知的可靠来源,而且它在传输过程中未被篡改。

第一步:为服务器生成证书

使用keytool为Tomcat生成证书,假定目标机器的域名为localhost,,keystore文件存放   在"c:\tomcat.keystore",口令为"password",如果Tomcat所在服务器的域名不是"localhost",

应改为对应的域名,如"www.sina.com.cn",否则浏览器会弹出警告窗口,提示用户证书与所在域不匹配,在本地做开发测试时,应填入"localhost".

keytool -genkey -v -alias tomcat -keyalg RSA -keystore C:\tomcat.keystore -dname "CN=localhost,OU=cn,O=cn,L=cn,ST=cn,C=cn" -storepass password -keypass password -validity 9900

第二步:为客户端生成证书

这一步是为浏览器生成证书,以便让服务器来验证它。为了能将证书顺利导入到IE和Firefox,证书格式应该为PKCS12,对应的证书库存放在"C:\my.p12",客户端CN可以任意值。

keytool -genkey -v -alias myKey -keyalg RSA -storetype PKCS12 -keystore c:\my.p12 -dname "CN=MyKey,OU=cn,O=cn,L=cn,ST=cn,C=cn" -storepass password -keypass password -validity 9900

第三步:让服务器信任客户端证书

由于是双向SSL认证,服务器必须要信任客户端证书,因此,必须把客户端证书添加为服务器的信任认证。

由于不能直接将PKCS12格式的证书导入,我们必须先把客户端证书导出为一个单独的CER文件

keytool -export -alias myKey -keystore C:\my.p12 -storetype PKCS12 -storepass password -rfc -file C:\my.cer

第四步:将CER文件导入到服务器的证书库,添加为一个信任证书。

keytool -import -v -file C:my.cer -keystore C:\tomcat.keystore -storepass password

第五步:通过list命令查看服务器的证书库,我们可以看到两个输入,一个是服务器证书,一个是受信任的客户端证书:

keytool -list -keystore C:\tomcat.keystore -storepass password

第六步:配置Tomcat服务器,打开tomcat根目录下的/conf/server.xml,找到如下片段

<Connector port="8443" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"

SSLEnabled="true"

maxThreads="150"

scheme="https"

secure="true"

clientAuth="true"

sslProtocol="TLS"

keystoreFile="c:/tomcat.keystore"

keystorePass="password"

truststoreFile="c:/tomcat.keystore"

truststorePass="password"/>

第七步:导入客户端证书

如果设置了clientAuth='true',双击“C:\my.p12”即可将证书导入到IE。

第八步:导入证书后,即可启动tomcat,用IE来访问。

https://localhost:8443 即可访问

如果浏览器客户端,没有导入浏览器认证的证书,访问就报下面的页面

wps_clip_image-13374[3][1]

如果浏览器客户端,导入了服务器认证的证书,访问就报下面的页面

下面页面列出来的证书,都是服务器认证的证书,没有认证的证书不会显示出来

wps_clip_image-16548[3][1]

点击“查看证书”

wps_clip_image-2802[3][1]

点击“取消”,显示下面的页面:

wps_clip_image-28660[3][1]

如果服务器的证书可信任,点击“确定”,就可以看到右边有一个锁,此时可以成功访问网页。

wps_clip_image-32221[3][1]

1. 单向认证,就是传输的数据加密过了,但是不会校验客户端的来源
2.双向认证,如果客户端浏览器没有导入客户端证书,是访问不了web系统的,找不到地址
如果只是加密,我感觉单向就行了。
如果想要用系统的人没有证书就访问不了系统的话,就采用双向

Localhost证书

wps_clip_image-17217[3][1]

wps_clip_image-29676[3][1]

wps_clip_image-13526[3][1]

wps_clip_image-14597[3][1]

wps_clip_image-22693[3][1]

wps_clip_image-12909[3][1]

wps_clip_image-912[3][1]

Jdk中的keytool工具介绍:

keytool用来管理私钥仓库(keystore)和与之相关的X.509证书链(用以验证与私钥对应的公钥),也可以用来管理其他信任实体。keytool 是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥(以证书形式)。

keytool 将密钥和证书储存在一个所谓的密钥仓库keystore中。缺省的密钥仓库实现将密钥仓库实现为一个文件。它用口令来保护私钥。

密钥仓库使用的别名

对所有的密钥仓库项(密钥项和可信任的证书项)的访问都要通过唯一的别名来进行。别名不区分大小写,即别名 Hugo 和 hugo 指的是同一密钥仓库项。  当用 -genkey

命令来生成密钥对(公钥和私钥)或用 -import 命令来将证书或证书链加到可信任证书的清单中,以增加一个实体到密钥仓库中,必须指定了一个别名。后续 keytool 命令必须

使用这一相同的别名来引用该实体。  例如,假设您用别名 duke 生成了新的公钥/私钥密钥对并将公钥用以下命令打包到自签名证书中(参见证书链):  keytool -

genkey -alias duke -keypass dukekeypasswd  这指定了一个初始口令“dukekeypasswd”,接下来的命令都要使用该口令才能访问与别名 duke 相关联的私钥。以后如果您想

更改 duke 的 私钥口令,可用类似下述的命令:  keytool -keypasswd -alias duke -keypass dukekeypasswd -new newpass  这将把口令从“dukekeypasswd”改为

“newpass”。  请注意:实际上,除非是作为测试目的或是在安全的系统上,否则不应在命令行或脚本中指定口令。如果没有在命令行上指定所要求的口令选项,您将会得到

要求输入口令的提示。当在口令提示符下键入口令时,口令将被即时显示出来(键入什么就显示什么),因此,要小心,不要当着任何人的面键入口令。

发表评论