分享

用SSL安全协议实现WEB服务器的安全性 / SSL是如何工作的?/SSL/TLS/WTL...

 drking 2011-05-06
用SSL安全协议实现WEB服务器的安全性 / SSL是如何工作的?/SSL/TLS/WTLS原理
2008-01-24 17:46
现今SSL安全协议广泛地用在Internet和Intranet的服务器产品和客户端产品中,用于安全地传送数据,集中到每个WEB服务器和浏览器中,从而来保证来用户都可以与Web站点安全交流 。本文将详细介绍SSL安全协议及在WEB服务器安全的应用。
  一、SSL安全协议在WEB服务器中的应用
  1、我们为提供具有真正安全连接的高速安全套接层SSL)交易,可以将PCI卡形式的SSL卸载(offloading)设备直接安装到Web服务器上,这种做法的好处是:
  (1)从客户机到安全Web服务器的数据安全性;
  (2)由于卸载工具执行所有SSL处理过程并完成TCP/IP协商,因此大大提高了吞吐量;
  (3)简化了密钥的管理和维护。
  安全性加大在实现向电子商务和其它安全Web站点的服务器增加SSL加速和卸载设备的结果是提高了交易处理速度。但是由于设备是作为应用被安装在网络上的,因此设备与安全服务器之间的数据是未加密的。将SSL卸载设备作为PCI扩展卡直接安装在安全服务器上,保证了从浏览器到服务器的连接安全性。
  SSL可以用于在线交易时保护象信用卡号以及股票交易明细这类敏感信息。受SSL保护的网页具有"https"前缀,而非标准的"http"前缀
  2、新型专用网络设备SSL加速器可以使Web站点通过在优化的硬件和软件中进行所有的SSL处理来满足性能和安全性的需要。
  当具有SSL功能的浏览器(Navigator、IE)与Web服务器(Apache、IIS)通信时,它们利用数字证书确认对方的身份。数字证书是由可信赖的第三方发放的,并被用于生成公共密钥。
  当最初的认证完成后,浏览器向服务器发送48字节利用服务器公共密钥加密的主密钥,然后Web服务器利用自己的私有密钥解密这个主密钥。最后,浏览器和服务器在会话过程中用来加解密的对称密钥集合就生成了。加密算法可以为每次会话显式地配置或协商,最广泛使用的加密标准为"数据加密标准"(DES)和RC4。
  一旦完成上述启动过程,安全通道就建立了,保密的数据传输就可以开始了。尽管初始认证和密钥生成对于用户是透明的,但对于Web服务器来说,它们远非透明。由于必须为每次用户会话执行启动过程,因而给服务器CPU造成了沉重负担并产生了严重的性能瓶颈。据测试,当处理安全的SSL会话时,标准的Web服务器只能处理1%到10%的正常负载。
  二、应做的处理
  密码在加解密数据时,使用两种类型的密钥。私有密钥被发给各实体并且永远不向外透露,公共密钥可以任意分发。这两种密钥对于认证过程是必不可少的。使用公钥加密的数据不能使用同一个密钥进行解密,必须使用私有密钥进行解密。
  SSL使用复杂的数学公式进行数据加密和解密,这些公式的复杂性根据密码的强度不同而不同。高强度的计算会使多数服务器停顿,导致性能下降。多数Web服务器在执行SSL相关任务时,吞吐量会显著下降,性能比在只执行HTTP 1.0连接时的速度慢50多倍。而且由于SSL复杂的认证方案和加/解密算法,SSL需要大量地消耗CPU资源,从而造成Web服务器性能很大的下降。它所造成的服务器瓶颈使Web站点的速度慢如蜗牛爬行,这无疑会失去在线客户。
  为解决这种性能上的损失,我们可以通过安装SSL加速器和卸载器来减少SSL交易中的时延。加速器通过执行一部分SSL处理任务来提高交易速度,同时依靠安全Web服务器软件完成其余的任务。卸载器承担所有SSL处理任务并且不需要安全Web服务器软件,从而使Web服务器可以以同样的高速度提供安全和非安全的服务。由于密钥管理和维护过程不依靠对应用软件的手工配置,因此使用卸载器效率会更高一些。
  多数这类设备作为网络应用被安装在机架式或小底座网络设备上,由于它们为整个网络提供加解密服务,因此设备与Web服务器之间的数据是未加密的。
  通过直接在服务器上安装SSL卸载器,可以解决速度和安全性问题。加密的数据由客户机经过Internet和网络直接传送到一台服务器上。安装在这台服务器上的卸载器对数据进行解密并将其沿PCI总线直接传送到处理器。这样做的结果是宿主服务器在保证客户机与服务器之间传输时数据安全性的同时,以非安全交易服务同样的速度提供了安全交易服务。
  SSL加速设备的出现就是为了解决对CPU资源过量需求的SSL协议所造成的性能问题,这类设备是一些用以在不增加Web服务器负担的条件下处理SSL任务的特殊的网络部件。通过优化硬件和软件,专用SSL加速器处理SSL会话的速度为标准Web服务器的10到40倍。此外,SSL加速器解放了服务器资源,使这些资源可以真正用于处理应用逻辑和数据库查询,从而加快了整个站点的速度。
  将SSL设备集成到网络中很简单,第4层到第7层交换机或负载均衡设备被配置为将所有的443端口(Https)请求改向传送到SSL设备。这时,这台设备承担所有的SSL处理任务,因而立即解脱了Web服务器的负载。随着安全传输流容量的增加,在不增加不必要的管理负担的条件下,可以再部署其他SSL设备。
  最近,SSL加速器功能已经被集成到象服务器端缓存(即所谓的"服务器加速器")这类Web内容提交产品中了。这种作法的主要好处是,服务器加速器进行SSL处理和对象提交。
  配置SSL功能的服务器加速器使广泛地将SSL用于Web基础设施上的安全内容交换成为可能,安全网页将快速地得到提交,安全交易也将迅速地完成。
  三、如何实现WEB和Internet安全
  我们在安装好Certificate Server后,给自己的Web Server发一张证书,安全站点已经建立起来了,在IIS管理器中打开安全通道(先不要接受客户证书验证,如果没有浏览器证书的话),把http改为https后访问的站点,怎么系统提示服务器证书有问题?记得在浏览器中安装的根证书了?要不就是服务器证书过期了,如果没有在浏览器中安装根证书,就要安装它,同时其他人通过Internet访问站点如果没有安装根证书,需要将根证书放在网上让别人下载。用IE安装根证书很简单,浏览器提示用户打开或保存时选择打开,会看到根证书信息然后按安装证书就可以了。但可能会发现Netscap无法安装根证书,SSL协议是由Netscape首先提出并实现的,Netscape使用MIME类型application/x-x509-ca-cert来表示CA证书,IE3.1以后开始支持SSL,起初Windows系统的数字证书文件(.crt和.cer)也采用相同的MIME类型,IE5.0以后MIME类型被改为application/pkix-cert这就造成Netscape安装根证书困难。不过这个问题好解决,只要在IIS里新注册application/x-x509-ca-cert的MIME类型就可以了。刚发的证书浏览器有时也会显示证书过期,这是因为浏览器判断证书有效是从证书有效起始时间的后一天开始,此外数字证书中的日期大都是GMT时间而不是本地时间,所以通常将本机时间向后调整一天这个问题就能解决,所以证书过期不仅仅可能表示太晚也可能表示太早。
  一切都已经就绪,进入安全网页了,在IE的状态栏里应该有一个小锁,双击这个小锁能看到站点证书信息,同时也能看到整个证书链。现在也许会问"那么现在我怎么用SSL加密我的数据呢?",实际上现在浏览器和Web服务器之间交换的所有信息都已经被加密,SSL是工作在网络层与会话层之间的协议,它在TCP/IP和HTTP之间增加了一个加密层,所以对于工作在HTTP协议以上的用户而言,加密是完全透明的,所以请忘记"用SSL加密"这句话,除非直接在Socket上开发,比如写个网络蚂蚁之类的。
  现在想用SSL实现更多的东西,不仅仅是加密。是申请浏览器(客户)证书的时候了,申请客户证书过程也不复杂,除了相同的名称,国家之类的还多一个EMail地址,如果用IE申请证书可能会有许多选项,其中有两个比较有意义,"允许私钥被导出"对与不在固定机器上上网的人比较有用,如果在一台机器上申请了证书,导出证书和私钥并安装到其他机器上就可以在其他机器上使用了。"用户保护"会让浏览器在使用的私钥时提示,这通常发生在加密和签名过程之前。证书安装过程通常都是自动的,安装完成后可以欣赏一下,在IE中打开Internet选项,选择内容一栏,按"证书"按钮",在个人一栏内应该有客户证书。
  现在在IIS管理器中设置站点要求客户证书,然后访问站点,浏览器会弹出一个对话框,让选择要使用的客户证书,然后就进去了,也没什么不同。那么怎么样利用SSL实现身份认证呢?首先可以在IIS管理器中启用客户证书映射,将客户证书影射到NT账号,可以映射某张证书,也可以映射所有根证书所签发的客户证书,如果在签发者列表中找不到根证书,需要运行SSLCA.exe(IIS4.0以上),以后的事就属于NT管理员的范畴了。如果不想用NT的安全机制,就需要获取对方客户证书的信息,然后进行判断。通常客户证书的信息由HTTPS_开头的服务器变量提供,如Apache Server,Domino等,可以查看文档或者写一个小的CGI程序列出所有的服务器变量。如果是IIS就更简单了:
  用 Request.ClientCertificate( Key[SubField] )可以访问想要的内容:
  如可显示客户证书的国家代码。具体参数请在MSDN搜索ClientCertificate。

http://windows./server/1393.html

---------------------------SSL是如何工作的?/-------------------------

声明:由于最近对安全加密相关技术比较感兴趣,所以翻译了这篇SSL的工作原理。这是一篇比较好的文章,深入浅出的介绍了SSL -- 安全套接层的工作原理,但是由于本人的加密知识及英语水平所限,感觉很多地方翻译的不好,但是我相信大家还是能够看懂的。:-)还是那句老话,本文欢迎非商业性转载,但请保持文章完整性并注明出处!
  
  密钥密码系统介绍
  
  这篇文章向大家阐述了Netscape公司是如何使用RSA的公用密钥密码系统来实现因特网安全的。Netscape的安全套接层的实现就利用了这篇文章中所讨论的技术。
  
  RSA的公用密钥密码系统广泛地应用于计算机工业的认证和加密方面。Netscape得到RSA数据安全公司的许可可以使用公用密钥密码系统以及其它产品,尤其是认证方面的产品。
  
  公用密钥加密技术使用不对称的密钥来加密和解密,每对密钥包含一个公钥和一个私钥,公钥是公开,而且广泛分布的,而私钥从来不公开,只有自己知道。
  
  用公钥加密的数据只有私钥才能解密,相反的,用私钥加密的数据只有公钥才能解密,正是这种不对称性才使得公用密钥密码系统那么有用。
  
  使用公用密钥密码系统进行认证
  
  认证是一个验证身份的过程,目的是使一个实体能够确信对方是他所声称的实体。下面的例子包括Alice和Bob,并且向我们演示了如何使用公用密钥密码系统来轻易的验证身份。下面的 {something}key 表示something 已经用密钥 key 加密或解密。
  
  假设Alice要认证Bob,Bob有一个密钥对,即一个公钥和一个私钥,Bob透露给Alice他的公钥(至于他是怎么做的将在以后讨论)。然后Alice产生一段随机的消息,然后把它发给Bob。
  
  A-->B random--message
  
  Bob用自己的私钥来加密这段消息,然后把加密后的消息返回给Alice。
  
  B-->A {random--message}bobs--private--key
  
  Alice接到了这段消息,然后用Bob以前发过来的公钥来解密。她把解密后的消息和原始的消息做比较,如果匹配的话,她就知道自己正在和Bob通信。一个入侵者应该不知道Bob的私钥,因此就不能正确的加密那段Alice要检查的随机消息。
  
  但是,等一下,还有......
  
  除非你确切的知道你在加密什么,否则用你的私钥加密一些东西,然后发给别人永远不是一件好事。这是因为加密后的数据可能会背叛你(记住,只有你能加密,因为只有你才有密钥)。
  
  所以,我们不加密Alice发送的原始消息,取而代之的是,由Bob构造一个消息摘要,然后加密它。消息摘要是从随机消息中以某种方式提取出来的,并且具有以下特点:
  
  摘要很难逆转,任何假冒Bob的人不能从摘要得到原始消息
  假冒者无法找到具有相同摘要的不同消息
  通过使用摘要,Bob能够保护自己。他首先计算出Alice发给他的随机消息的摘要并加密,然后把加密后的摘要返回给Alice,Alice可以计算出相同的摘要,通过解密Bob的消息然后对比一下就可以认证Bob的身份。
  
  近一点......
  
  刚才描述的技术称为数字签名。Bob为Alice产生的消息签名,这样做其实和加密Alice产生的随机消息一样危险。因此我们的认证协议需要一次以上的变形。部分(或者全部)的数据需要由Bob产生。
  
  A-->B hello,are you bob?
  B-->A Alice,This Is bob{digest[Alice,This Is Bob]}bobs-private-key
  
  当Bob使用这个协议的时候,他知道自己发给Alice的是什么消息,并且不介意签名。他首先发送没有加密的消息“Alice,This Is Bob。”然后发送加密的摘要。Alice能够轻易的判断Bob是Bob,并且Bob没有签任何他不愿意签的东西。
  
  分发公钥
  
  Bob如何以一种可信赖的方式分发他的公钥呢?我们假设认证协议是这个样子的:
  
  A-->B hello
  B-->A Hi, I'm Bob, bobs-public-key
  A-->B prove it
  B-->A Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
  
  如果使用这个协议的话,任何人都可以是Bob。你需要的只是一个公钥和私钥,你跟Alice慌称你是Bob,接着你用自己的公钥代替Bob的公钥,然后你通过用你的私钥加密的东西来证明,这样Alice就不能分辨出你不是Bob。
  
  为了解决这个问题,标准化组织发明了一个叫做证书的东西,一个证书包括下面的一些内容:
  
  证书发行者的名字
  证书发送给的团体
  主题的公钥
  一些时间戳
  证书是由证书发行者的私钥签名的,每个人都知道证书发行者的公钥(即证书发行者有一个证书,等等)。证书是一种把公钥绑定到名字的标准方式。
  
  通过使用证书这种技术,每个人都可以通过检查Bob的证书来判断Bob是不是伪造的。假设Bob严格的控制着他的私钥,并且的确是Bob得到了他的证书,那么一切都好。下面是补偿协议:
  
  A-->B hello
  B-->A Hi, I'm Bob, bobs-certificate
  A-->B prove it
  B-->A Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
  
  当Alice收到Bob的第一条消息,她可以检查证书,核实签名(如上,使用摘要和公钥加密),然后,核实主题(Bob的名字)来判断那是不是真的Bob。这样她就相信公钥是Bob的公钥,然后要求Bob证明他的身份。Bob则重新进行一次上面的相同过程,计算消息的摘要,签名之后发给Alice,Alice可以用从证书得到的公钥检查Bob的消息摘要,从而判断Bob的身份。
  
  一个坏家伙 - 我们不妨叫他Mallet - 可以做下面的事情:
  
  A-->M hello
  M-->A Hi, I'm Bob, bobs-certificate
  A-->M prove it
  M-->A ????
  
  但是Mallet在最后的消息中不能满足Alice。Mallet没有Bob的私钥,所以他无法构造一条使Alice相信来自Bob的消息。
  
  交换秘密
  
  一旦Alice认证了Bob,她就可以做另外一件事-她能发给一条只有Bob才能解码的消息:
  
  A-->B {secret}bobs-public-key
  
  发现这个秘密的唯一方法就是用Bob的私钥来解密上面的消息,交换秘密是公用密钥密码系统的另一种强大的用法。即使Alice和Bob之间的通信被监视,除了Bob,也没有人能够得到秘密。
  
  这项技术加强了因特网的安全性,它把这个密码当作另一个密钥,但是这时它是对称性密码系统算法的密钥(如DES,RC4,IDEA)。Alice知道这个秘密,因为这是自己在发送给Bob之前产生的。Bob知道这个秘密,因为Bob有私钥,能够解密Alice的消息。因为他们都知道这个秘密,所以他们就可以初始化一个对称的密码算法然后开始传输用它加密的消息。下面是订正的协议:
  
  A-->B hello
  B-->A Hi, I'm Bob, bobs-certificate
  A-->B prove it
  B-->A Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
  A-->B ok bob, here is a secret {secret} bobs-public-key
  B-->A {some message}secret-key
  
  secret-key 的计算取决于协议的定义,但是它可以简化成一个 secret 的副本。
  
  你说什么?
  
  Mallet的袋子里有很多诡计。虽然Mallet不能发现Alice和Bob交换的秘密,但是他可以干预并且破坏他们的对话。举例来说,如果Mallet位于Alice和Bob,他可以选择让大多数的消息返回以及向前继续传输没有改变,但是破坏了特定位的消息(这对他来说很容易,因为他知道Alice和Bob之间通信的协议)。
  
  A-->M hello
  M-->B hello
  
  B-->M Hi, I'm Bob, bobs-certificate
  M-->A Hi, I'm Bob, bobs-certificate
  
  A-->M prove it
  M-->B prove it
  
  B-->M Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
  M-->A Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
  
  A-->M ok bob, here is a secret {secret} bobs-public-key
  M-->B ok bob, here is a secret {secret} bobs-public-key
  
  B-->M {some message}secret-key
  M-->A Garble[ {some message}secret-key ]
  
  Mallet一直让数据没有改变的通过,直到Alice和Bob分享一个秘密。然后Mallet通过改变Bob发送给Alice的消息来进入这个方式中。这时候Alice是相信Bob的,因此她就可能相信这个改变的消息,然后按照它来做。注意Mallet并不知道这个秘密-他能做的所有事就是破坏用这个秘密的密钥加密的数据。他可能不能利用这个协议制造出一条有效的消息,但是下一次,他可能幸运一点。
  
  为了防止这种破坏,Alice和Bob在他们的协议中引入了一种消息认证码(MAC)。MAC是根据秘密的密钥和传输的数据计算出来的,上面描述的摘要算法的属性正好可以用于构造抵抗Mallet的MAC功能。
  
  MAC := Digest[ some message, secret ]
  
  因为Mallet不知道这个秘密的密钥,所以他无法计算出这个摘要的正确数值。即使Mallet随机的改变消息,如果摘要数据很大的话,他成功的可能性也很小。举例来说,通过使用MD5(RSA公司发明的一种很好的密码摘要算法),Alice和Bob能和他们的消息一起发送128位的MAC值。Mallet猜中这个正确的MAC值的几率是18,446,744,073,709,551,616 分之1-也就是从来也不会猜出来。
  
  下面是样本协议,又订正了一次:
  
  A-->B hello
  B-->A Hi, I'm Bob, bobs-certificate
  A-->B prove it
  B-->A {digest[Alice, This Is Bob] } bobs-private-key
  ok bob, here is a secret {sec

http://ciw./tech/7336.html

-------SSL/TLS/WTLS原理---------------------

在CIW课程中虽然没有对SSL做深入的讨论,但是SSL已成为应用最广泛的互连网安全协议了,有必要对其深刻理解
  
  
  一 前言
  
  首先要澄清一下名字的混淆:
  1 SSL(Secure Socket Layer)是netscape公司设计的主要用于web的安全传输协议。这种协议在WEB上获得了广泛的应用。
  2 IETF(www.ietf.org)将SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小。由于本文中没有涉及两者间的细小差别,本文中这两个名字等价。
  3 在WAP的环境下,由于手机及手持设备的处理和存储能力有限,wap论坛(www.wapforum.org)在TLS的基础上做了...S协议(Wireless Transport Layer Security),以适应无线的特殊环境。
  
  我们从各式各样的文章中得知,SSL可以用于保密的传输,这样我们与web server之间传输的消息便是“安全的”。
  而这种“安全”究竟是怎么实现的,最终有能实现多大程度的保密?本文希望能用通俗的语言阐明其实现原理。
  
  
  二 整体结构概览
  
  SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下:
  
  ---------
  | HTTP |
  ---------
  | SSL |
  ---------
  | TCP |
  ---------
  | IP |
  ---------
  
  如果利用SSL协议来访问网页,其步骤如下:
  用户:在浏览器的地址栏里输入https://www.
  HTTP层:将用户需求翻译成HTTP请求,如
  GET /index.htm HTTP/1.1
  Host http://www.
  
  SSL层: 借助下层协议的的信道安全的协商出一份加密密钥,并用此密钥来加密HTTP请求。
  TCP层:与web server的443端口建立连接,传递SSL处理后的数据。
  
  接收端与此过程相反。
  
  SSL在TCP之上建立了一个加密通道,通过这一层的数据经过了加密,因此达到保密的效果。
  
  SSL协议分为两部分:Handshake Protocol和Record Protocol,。其中Handshake Protocol用来协商密钥,协议的大部分内容就是通信双方如何利用它来安全的协商出一份密钥。 Record Protocol则定义了传输的格式。
  
  
  三 需要的加密方面的基础知识
  了解SSL原理需要一点点加密的概念,这里把需要的概念做一下简单阐述:
  
  加密一般分为三类,对称加密,非对称加密及单向散列函数。
  
  对称加密:又分分组密码和序列密码。
  分组密码是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算
  (加密运算的逆运算),还原成明文组。
  序列密码是指利用少量的密钥(制乱元素)通过某种复杂的运算(密码算法)产生大量的伪随机位流,用于对明文位流的加密。
  解密是指用同样的密钥和密码算法及与加密相同的伪随机位流,用以还原明文位流。
  
  CBC(Cipher Block Chaining)模式这个词在分组密码中经常会用到,它是指一个明文分组在被加密之前要与前一个的密文分组进行异或运算。当加密算法用于此模式的时候除密钥外,还需协商一个初始化向量(IV),这个IV没有实际意义,只是在第一次计算的时候需要用到而已。采用这种模式的话安全性会有所提高。
  
  分组密码的典型例子为DES,RC5,IDEA。
  序列密码的典型例子为RC4。
  
  公钥加密:
  简单的说就是加密密钥与解密密钥不同,分私钥和公钥。这种方法大多用于密钥交换,RSA便是一个我们熟知的例子。
  还有一个常用的称作DH,它只能用于密钥交换,不能用来加密。
  
  单向散列函数:
  由于信道本身的干扰和人为的破坏,接受到的信息可能与原来发出的信息不同,一个通用的办法就是加入校验码。
  单向散列函数便可用于此用途,一个典型的例子是我们熟知的MD5,它产生128位的摘要,在现实中用的更多的是安全散列算法(SHA),SHA的早期版本存在问题,目前用的实际是SHA-1,它可以产生160位的摘要,因此比128位散列更能有效抵抗穷举攻击。
  
  由于单向散列的算法都是公开的,所以其它人可以先改动原文,再生成另外一份摘要。解决这个问题的办法可以通过HMAC(RFC 2104),它包含了一个密钥,只有拥有相同密钥的人才能鉴别这个散列。
  
  
  四 密钥协商过程
  
  由于对称加密的速度比较慢,所以它一般用于密钥交换,双方通过公钥算法协商出一份密钥,然后通过对称加密来通信,当然,为了保证数据的完整性,在加密前要先经过HMAC的处理。
  
  
  SSL缺省只进行server端的认证,客户端的认证是可选的。以下是其流程图(摘自TLS协议)。
  
  
  Client Server
  
  Clienth*llo -------->
  Serverh*llo
  Certificate*
  ServerKeyExchange*
  CertificateRequest*
  <-------- Serverh*lloDone
  Certificate*
  ClientKeyExchange
  CertificateVerify*
  [ChangeCipherSpec]
  Finished -------->
  [ChangeCipherSpec]
  <-------- Finished
  Application Data <-------> Application Data
  
  简单的说便是:SSL客户端(也是TCP的客户端)在TCP链接建立之后,发出一个Clienth*llo来发起握手,这个消息里面包含了自己可实现的算法列表和其它一些需要的消息,SSL的服务器端会回应一个Serverh*llo,这里面确定了这次通信所需要的算法,然后发过去自己的证书(里面包含了身份和自己的公钥)。Client在收到这个消息后会生成一个秘密消息,用SSL服务器的公钥加密后传过去,SSL服务器端用自己的私钥解密后,会话密钥协商成功,双方可以用同一份会话密钥来通信了。
  
  
  五 密钥协商的形象化比喻
  
  如果上面的说明不够清晰,这里我们用个形象的比喻,我们假设A与B通信,A是SSL客户端,B是SSL服务器端,加密后的消息放在方括号[]里,以突出明文消息的区别。双方的处理动作的说明用圆括号()括起。
  
  A:我想和你安全的通话,我这里的对称加密算法有DES,RC5,密钥交换算法有RSA和DH,摘要算法有MD5和SHA。
  
  B:我们用DES-RSA-SHA这对组合好了。
  这是我的证书,里面有我的名字和公钥,你拿去验证一下我的身份(把证书发给A)。
  目前没有别的可说的了。
  
  A:(查看证书上B的名字是否无误,并通过手头早已有的CA的证书验证了B的证书的真实性,如果其中一项有误,发出警告并断开连接,这一步保证了B的公钥的真实性)
  (产生一份秘密消息,这份秘密消息处理后将用作加密密钥,加密初始化向量和hmac的密钥。将这份秘密消息-协议中称为per_master_secret-用B的公钥加密,封装成称作ClientKeyExchange的消息。由于用了B的公钥,保证了第三方无法窃听)
  我生成了一份秘密消息,并用你的公钥加密了,给你(把ClientKeyExchange发给B)
  注意,下面我就要用加密的办法给你发消息了!
  (将秘密消息进行处理,生成加密密钥,加密初始化向量和hmac的密钥)
  [我说完了]
  
  B:(用自己的私钥将ClientKeyExchange中的秘密消息解密出来,然后将秘密消息进行处理,生成加密密钥,加密初始化向量和hmac的密钥,这时双方已经安全的协商出一套加密办法了)
  注意,我也要开始用加密的办法给你发消息了!
  [我说完了]
  
  A: [我的秘密是...]
  
  B: [其它人不会听到的...]
  
  
  六 加密的计算
  上一步讲了密钥的协商,但是还没有阐明是如何利用加密密钥,加密初始化向量和hmac的密钥来加密消息的。
  其实其过程不过如此:
  1 借助hmac的密钥,对明文的消息做安全的摘要处理,然后和明文放到一起。
  2 借助加密密钥,加密初始化向量加密上面的消息。
  
  
  七 安全性
  SecurityPortal在2000年底有一份文章《The End of SSL and SSH?》激起了很多的讨论,
  目前也有一些成熟的工具如dsniff(http://www./~dugsong/dsniff/)可以
  通过man in the middle攻击来截获https的消息。
  
  从上面的原理可知,SSL的结构是严谨的,问题一般出现在实际不严谨的应用中。常见的攻击就是
  middle in the middle攻击,它是指在A和B通信的同时,有第三方C处于信道的中间,可以完全
  听到A与B通信的消息,并可拦截,替换和添加这些消息。
  
  1 SSL可以允许多种密钥交换算法,而有些算法,如DH,没有证书的概念,这样A便无法验证B的公钥
  和身份的真实性,从而C可以轻易的冒充,用自己的密钥与双方通信,从而窃听到别人谈话的内容。
  而为了防止middle in the middle攻击,应该采用有证书的密钥交换算法。
  2 有了证书以后,如果C用自己的证书替换掉原有的证书之后,A的浏览器会弹出一个警告框进行警告,但又有多少人会注意这个警告呢?
  3 由于美国密码出口的限制,IE,netscape等浏览器所支持的加密强度是很弱的,如果只采用浏览器自带的加密功能的话,理论上存在被破解可能。
  
  
  八 代理
  下面探讨一下SSL的代理是怎样工作的(可参见[6])。这可能与你开始想的不太一样:)
  当在浏览器里设置了https的代理,而且在浏览器里输入了https://www.之后,
  浏览器会与proxy建立tcp链接,然后向其发出

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多