来源:互联网
在网络上,信息在传递过程中会经过其他计算机.一般情况下它不会监听信息内容.但在网上使用网上银行或等交易的时候可能被监视,从而导致信息泄露.这时候就要应用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 即可访问
如果浏览器客户端,没有导入浏览器认证的证书,访问就报下面的页面
如果浏览器客户端,导入了服务器认证的证书,访问就报下面的页面
下面页面列出来的证书,都是服务器认证的证书,没有认证的证书不会显示出来
点击“查看证书”
点击“取消”,显示下面的页面:
如果服务器的证书可信任,点击“确定”,就可以看到右边有一个锁,此时可以成功访问网页。
1. 单向认证,就是传输的数据加密过了,但是不会校验客户端的来源
2.双向认证,如果客户端浏览器没有导入客户端证书,是访问不了web系统的,找不到地址
如果只是加密,我感觉单向就行了。
如果想要用系统的人没有证书就访问不了系统的话,就采用双向
Localhost证书
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”。 请注意:实际上,除非是作为测试目的或是在安全的系统上,否则不应在命令行或脚本中指定口令。如果没有在命令行上指定所要求的口令选项,您将会得到
要求输入口令的提示。当在口令提示符下键入口令时,口令将被即时显示出来(键入什么就显示什么),因此,要小心,不要当着任何人的面键入口令。