在网络上,信息在传递过程中会经过其他计算机.一般情况下它不会监听信息内容.但在网上使用网上银行或等交易的时候可能被监视,从而导致信息泄露.这时候就要应用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多.
Tomcat中的SSL
如果tomcat作为非独立的容器,如jboss,它嵌入了tomcat.这时候它就相当于一个插件,而不是独立的容器.这种情况下用设置SSL.但如果作为独立的容器.则要设置,有两步:
1. 准备安全证书.
2. 配置tomcat的SSL连接器.
准备安全证书
从权威机构买证书就不讲了.这里说自我签名的方式.
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释放出来.
来源:oschina
链接:https://my.oschina.net/u/218843/blog/158330