tomcat SSL

2021-02-20 07:59发布

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

SSL是一种保证在网络上的两个节点之间进行安全通信的机制.它可以用来建立安全的连接.网络通信协议如HTTP,IMAP都可以采用SSL.采用了SSLHTTP协议叫: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.

Tomcat中的SSL

如果tomcat作为非独立的容器,jboss,它嵌入了tomcat.这时候它就相当于一个插件,而不是独立的容器.这种情况下用设置SSL.但如果作为独立的容器.则要设置,有两步:

1.       准备安全证书.

2.       配置tomcatSSL连接器.

准备安全证书

从权威机构买证书就不讲了.这里说自我签名的方式.

SUN提供了制作签名的工具:keytool,JDK1,4以上版本中包含这个工具.它在:<JAVA_HOME>\bin\keytool.exe

创建证书的命令是:

keytool –genkey –alias tomcat –keyalg RSA

上面命令将会生成一对非对称密钥和自我签名的证书.命令中各参数含义:

-genkey : 生成密钥对

-alias : 指定密钥的别名,别名是公开的.

-keyalg : 指定加密算法,这里是RSA算法.

该命令运行时会提示输入keystore 的密码.输入tomcat默认的密码:cbangeit,然后会提示输入个人信息,按实输入就行.最后按Y确认.最后要输入tomcat密码.就是上面那个.

该命令会在windows的用户目录下生成名为: .keystore的文件.如果想指定文件存放路径,可以在命令最后加入:-keystore d:\

实例如下:

C:\Documents and Settings\Administrator>keytool -genkey -alias tomcat -keyalg RSA

输入keystore密码:

再次输入新密码:

您的名字与姓氏是什么?

  [Unknown]  sun

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

  [Unknown]  ine

您的组织名称是什么?

  [Unknown]  it

您所在的城市或区域名称是什么?

  [Unknown]  wh

您所在的州或省份名称是什么?

  [Unknown]  hubei

该单位的两字母国家代码是什么

  [Unknown]  CH

CN=sun, OU=ine, O=it, L=wh, ST=hubei, C=CH 正确吗?

  []  y

 

输入<tomcat>的主密码

        (如果和 keystore 密码相同,按回车):

再次输入新密码:

C:\Documents and Settings\Administrator>

最后,在我的C:\Documents and Settings\Administrator有一文件:



 

配置SSL连接

Tomcat中已经有责成的SSL配置,但被注释掉了.我们只需要在在server.xml中启用就OK.

 

如上图,具体文字是:

    

<!-- Define a SSL HTTP/1.1 Connector on port 8443

         This connector uses the JSSE configuration, when using APR, the

         connector should be using the OpenSSL style configuration

         described in the APR documentation -->

    <!--

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

               maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS" />

    -->

将下面的connector释放出来.

标签: