piaozhili 发表于 2011-12-21 08:43

SSL通讯原理 (生活版)

<DIV>
<DIV>
<DIV class=articalTitle>
SSL通讯原理&nbsp;(生活版)</DIV>
<DIV id=sina_keyword_ad_area class=articalTag>&nbsp;</DIV>
<DIV id=sina_keyword_ad_area2 class="articalContent">
<DIV>
<DIV>
<P><FONT color=#000000><SPAN style="FONT-FAMILY: 宋体"><FONT size=4><SPAN style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp; 工作需要做了一部分</SPAN><SPAN lang=EN-US xml:lang="EN-US">Apache</SPAN><SPAN style="FONT-FAMILY: 宋体">配置</SPAN><SPAN lang=EN-US xml:lang="EN-US">SSL</SPAN><SPAN style="FONT-FAMILY: 宋体">方面的东东,对</SPAN><SPAN lang=EN-US xml:lang="EN-US">SSL</SPAN><SPAN style="FONT-FAMILY: 宋体">的通讯过程作了一些了解。时间过了挺长,包抓了不少,资料看了不少,弯路走了不少。现在做个小小的总结。接受大家考察。</SPAN></FONT></SPAN></FONT></P>
<P><FONT color=#000000><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-FAMILY: 宋体"></SPAN></SPAN></FONT><FONT size=4 face=宋体></FONT>&nbsp;</P>
<P><FONT color=#000000><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-FAMILY: 宋体"><FONT size=4>&nbsp;&nbsp;&nbsp; 关于SSL数字证书,国际上顶级的认证中心(CA)<a href="http://www.willrey.com/VeriSign/verisign_price.html" target=_blank vpos="down" target="_blank">VeriSign</A>、<a href="http://www.willrey.com/Thawte/thawte_price.html" target=_blank vpos="down" target="_blank">Thawte</A>、<A href="http://www.willrey.com/Geotrust/Geotrust_price.html" target=_blank>GeoTrust</A>、<A href="http://www.willrey.com/GlobalSign/GlobalSign_price.html" target=_blank>GlobalSig</A>n等都有销售。国内的 VeriSign(<a href="http://www.willrey.com/VeriSign/verisign_price.html" target="_blank">http://www.willrey.com/VeriSign/verisign_price.html</A>)代理机构如</FONT><A href="http://www.willrey.com/" target=_blank><FONT size=4>维瑞电子商务</FONT></A><FONT size=4>,,提供不同需求的SSL证书产品及应用解决方案。</FONT></SPAN></SPAN></FONT></P>
<P><SPAN lang=EN-US xml:lang="EN-US"><FONT face=宋体><FONT size=4>&nbsp;</FONT></FONT></SPAN></P>
<P><FONT face=宋体><FONT size=4><SPAN lang=EN-US xml:lang="EN-US">SSL</SPAN><SPAN style="FONT-FAMILY: 宋体">即</SPAN><SPAN lang=EN-US xml:lang="EN-US">Secure Socket Layer,</SPAN> <SPAN style="FONT-FAMILY: 宋体">是一种在</SPAN><SPAN lang=EN-US xml:lang="EN-US">TCP</SPAN><SPAN style="FONT-FAMILY: 宋体">层之上,应用层之下的实现安全信息传输的方式。</SPAN><SPAN style="FONT-FAMILY: 宋体">这里介绍的</SPAN><SPAN lang=EN-US xml:lang="EN-US">SSL</SPAN><SPAN style="FONT-FAMILY: 宋体">是嵌入在特定应用程序中实现的。在</SPAN><SPAN lang=EN-US xml:lang="EN-US">TCP/IP</SPAN><SPAN style="FONT-FAMILY: 宋体">模型的位置如下:</SPAN></FONT></FONT></P>
<DIV align=center>
<TABLE style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BORDER-TOP: medium none; BORDER-RIGHT: medium none" border=1 cellSpacing=0 cellPadding=0>
<TBODY>
<TR>
<TD vAlign=top width=67>
<P align=center><SPAN lang=EN-US xml:lang="EN-US"><FONT color=#000000 size=4 face=宋体>HTTP</FONT></SPAN></P></TD>
<TD vAlign=top width=39>
<P align=center><SPAN lang=EN-US xml:lang="EN-US"><FONT color=#000000 size=4 face=宋体>FTP</FONT></SPAN></P></TD>
<TD vAlign=top width=57>
<P align=center><SPAN lang=EN-US xml:lang="EN-US"><FONT color=#000000 size=4 face=宋体>SMTP</FONT></SPAN></P></TD></TR>
<TR>
<TD vAlign=top width=163 colSpan=3>
<P align=center><SPAN lang=EN-US xml:lang="EN-US"><FONT color=#000000 size=4 face=宋体>SSL or TLS</FONT></SPAN></P></TD></TR>
<TR>
<TD vAlign=top width=163 colSpan=3>
<P align=center><SPAN lang=EN-US xml:lang="EN-US"><FONT color=#000000 size=4 face=宋体>TCP</FONT></SPAN></P></TD></TR>
<TR>
<TD vAlign=top width=163 colSpan=3>
<P align=center><SPAN lang=EN-US xml:lang="EN-US"><FONT color=#000000 size=4 face=宋体>IP</FONT></SPAN></P></TD></TR></TBODY></TABLE></DIV>
<P><SPAN lang=EN-US xml:lang="EN-US"><FONT face=宋体><FONT size=4>&nbsp;</FONT></FONT></SPAN></P>
<P><SPAN style="FONT-FAMILY: 宋体"><FONT size=4>安全认证包含三个方面:内容加密,消息完整性和身份认证。</FONT></SPAN></P>
<P><FONT face=宋体><FONT size=4><B><SPAN style="FONT-SIZE: 12pt" lang=EN-US xml:lang="EN-US"><SPAN>1.<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;</SPAN></SPAN></SPAN></B> <B><SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">内容加密</SPAN></B></FONT></FONT></P>
<P><FONT size=4><SPAN style="FONT-FAMILY: 宋体">最初,据我猜测</SPAN><FONT face=宋体><SPAN lang=EN-US xml:lang="EN-US">~~</SPAN><SPAN style="FONT-FAMILY: 宋体">,可能大概也许,人们想到的是内容加密,理由很简单,不希望消息用明文在网络上传输。就好象我们写信一定要加个信封,做好保密工作。所以第一部份就是内容加密。比如我在淘包上买了瓶花水,我要告诉招商银行:</SPAN></FONT></FONT></P>
<P><FONT face=宋体><FONT size=4><SPAN lang=EN-US xml:lang="EN-US">Dear bank,</SPAN> <SPAN style="FONT-FAMILY: 宋体">把</SPAN><SPAN lang=EN-US xml:lang="EN-US">105</SPAN><SPAN style="FONT-FAMILY: 宋体">块钱转给支付包。</SPAN></FONT></FONT></P>
<P><FONT size=4><SPAN style="FONT-FAMILY: 宋体">要是</SPAN><FONT face=宋体><SPAN lang=EN-US xml:lang="EN-US">ethereal</SPAN><SPAN style="FONT-FAMILY: 宋体">抓的包里有这些明文的信息,那完了。我的帐户就极其不安全。所以我就要把这个消息加密,把加密后的消息发给银行。就好象把消息装在一个盒子里,把盒子上锁,银行收到盒子打开锁,就</SPAN><SPAN lang=EN-US xml:lang="EN-US">OK</SPAN><SPAN style="FONT-FAMILY: 宋体">了。</SPAN></FONT></FONT></P>
<P><FONT face=宋体><FONT size=4><SPAN lang=EN-US xml:lang="EN-US"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN></SPAN> <SPAN style="FONT-FAMILY: 宋体">有了带锁的盒子,就是钥匙的问题了。有</SPAN><SPAN lang=EN-US xml:lang="EN-US">2</SPAN><SPAN style="FONT-FAMILY: 宋体">种方式可供选择,对称密码和不对称密码。对称密码就是我和银行有同一把钥匙。不对称密码就是我和银行的钥匙不一样。现在</SPAN><SPAN lang=EN-US xml:lang="EN-US">SSL</SPAN><SPAN style="FONT-FAMILY: 宋体">都选择使用不对称密码。即公钥密钥密码系统。公钥是发给每一个想和银行有业务关系的客户。密钥只有银行有。所以我会用公钥把消息加密上锁,银行收到后用她的密钥解密开锁。</SPAN></FONT></FONT></P>
<P><SPAN style="FONT-FAMILY: 宋体"><FONT size=4>必须注意:用公钥加密的数据只有私钥才能解密,相反的,用私钥加密的数据只有公钥才能解密。</FONT></SPAN></P>
<P><SPAN style="FONT-FAMILY: 宋体"><FONT size=4>可是假如有个中间人,劫持了我的消息,篡改了消息,改为把钱打到他的帐号上,同样用银行的公钥加密(人人都有),那我的帐户同样存在危险。这就是第二步,消息完整性。</FONT></SPAN></P>
<P><FONT face=宋体><FONT size=4><B><SPAN style="FONT-SIZE: 12pt" lang=EN-US xml:lang="EN-US"><SPAN>2.<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;</SPAN></SPAN></SPAN></B> <B><SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">消息完整性</SPAN></B></FONT></FONT></P>
<P><FONT size=4><SPAN style="FONT-FAMILY: 宋体">(使用情形仅用于说明消息摘要的原理,仅明白原理就</SPAN><FONT face=宋体><SPAN lang=EN-US xml:lang="EN-US">OK</SPAN><SPAN style="FONT-FAMILY: 宋体">了。)</SPAN></FONT></FONT></P>
<P><SPAN style="FONT-FAMILY: 宋体"><FONT size=4>为了保证划转资金的这个消息是完整的,没有被人篡改过的,就和这个消息一起发送一个摘要给银行,银行用这个摘要和原始消息生成的摘要作对比,如果一致,则认为消息是没有被篡改过的,完整的从我这里发出去的。</FONT></SPAN></P>
<P><FONT size=4><SPAN style="FONT-FAMILY: 宋体">好了,现在我用消息生成摘要,把这些东东加密给银行发过去。那下一个重要的问题是,</SPAN><SPAN style="FONT-FAMILY: 宋体">我怎么知道那个</SPAN><FONT face=宋体><SPAN lang=EN-US xml:lang="EN-US">XX</SPAN><SPAN style="FONT-FAMILY: 宋体">就是我要通讯的银行。所以就目前的技术,我得验证这个</SPAN><SPAN lang=EN-US xml:lang="EN-US">XX</SPAN><SPAN style="FONT-FAMILY: 宋体">是银行。通讯初始阶段,流程是这样地:</SPAN></FONT></FONT></P>
<P><FONT size=4><B><SPAN style="FONT-FAMILY: 宋体">我</SPAN><FONT face=宋体> <SPAN lang=EN-US xml:lang="EN-US">-&gt;</SPAN></FONT></B><FONT face=宋体> <B><SPAN style="FONT-FAMILY: 宋体">招商银行</SPAN></B><SPAN style="FONT-FAMILY: 宋体">:</SPAN><SPAN lang=EN-US xml:lang="EN-US">hi,</SPAN> <SPAN style="FONT-FAMILY: 宋体">招行?</SPAN></FONT></FONT></P>
<P><FONT size=4><B><SPAN style="FONT-FAMILY: 宋体">招商银行</SPAN><FONT face=宋体> <SPAN lang=EN-US xml:lang="EN-US">-&gt;</SPAN></FONT></B><B><SPAN style="FONT-FAMILY: 宋体">我</SPAN></B><SPAN style="FONT-FAMILY: 宋体">:我就是招商银行</SPAN><FONT face=宋体><SPAN lang=EN-US xml:lang="EN-US">+</SPAN><SPAN style="FONT-FAMILY: 宋体">银行公钥。</SPAN></FONT></FONT></P>
<P><FONT size=4><B><SPAN style="FONT-FAMILY: 宋体">我</SPAN><FONT face=宋体> <SPAN lang=EN-US xml:lang="EN-US">-&gt;</SPAN></FONT></B><FONT face=宋体> <B><SPAN style="FONT-FAMILY: 宋体">招商银行</SPAN></B><SPAN style="FONT-FAMILY: 宋体">:给个理由先。</SPAN></FONT></FONT></P>
<P><FONT size=4><B><SPAN style="FONT-FAMILY: 宋体">招商银行</SPAN><FONT face=宋体> <SPAN lang=EN-US xml:lang="EN-US">-&gt;</SPAN></FONT></B><FONT face=宋体> <B><SPAN style="FONT-FAMILY: 宋体">我</SPAN></B><SPAN style="FONT-FAMILY: 宋体">:我就是招商银行</SPAN><SPAN lang=EN-US xml:lang="EN-US">+</SPAN><SPAN style="FONT-FAMILY: 宋体">银行私钥加密</SPAN><SPAN lang=EN-US xml:lang="EN-US">{</SPAN><SPAN style="FONT-FAMILY: 宋体">“我就是招商银行”</SPAN><SPAN lang=EN-US xml:lang="EN-US">+</SPAN> <SPAN style="FONT-FAMILY: 宋体">消息摘要</SPAN><SPAN lang=EN-US xml:lang="EN-US">}</SPAN></FONT></FONT></P>
<P><FONT size=4><B><SPAN style="FONT-FAMILY: 宋体">我</SPAN><FONT face=宋体> <SPAN lang=EN-US xml:lang="EN-US">-&gt;</SPAN></FONT></B><FONT face=宋体> <B><SPAN style="FONT-FAMILY: 宋体">招商银行:</SPAN></B><SPAN style="FONT-FAMILY: 宋体">银行公钥加密</SPAN><SPAN lang=EN-US xml:lang="EN-US">{</SPAN><SPAN style="FONT-FAMILY: 宋体">“我要转账给支付宝”</SPAN><SPAN lang=EN-US xml:lang="EN-US">+</SPAN> <SPAN style="FONT-FAMILY: 宋体">消息摘要</SPAN><SPAN lang=EN-US xml:lang="EN-US">}</SPAN></FONT></FONT></P>
<P><B><SPAN lang=EN-US xml:lang="EN-US"><FONT size=4 face=宋体>….</FONT></SPAN></B></P>
<P><FONT size=4><SPAN style="FONT-FAMILY: 宋体">我收到公钥在询问一次,因为只有银行的私钥加密的消息,我才能用这个公钥解开。所以第四步我成功解密,我就有理由认为现在这个</SPAN><FONT face=宋体><SPAN lang=EN-US xml:lang="EN-US">XX</SPAN><SPAN style="FONT-FAMILY: 宋体">是银行了。</SPAN></FONT></FONT></P>
<P><FONT face=宋体><FONT size=4>但是,任何一个有公钥密钥的<SPAN lang=EN-US xml:lang="EN-US">XX</SPAN><SPAN style="FONT-FAMILY: 宋体">都可以仿冒银行。只要他劫持到我的访问请求就可以肆无忌惮的套出我的银行信息。这才是最最糟糕的事。于是进行第三步,身份认证。</SPAN></FONT></FONT></P>
<P><FONT face=宋体><FONT size=4><B><SPAN style="FONT-SIZE: 12pt" lang=EN-US xml:lang="EN-US"><SPAN><FONT color=#000000>1.<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;</SPAN></FONT></SPAN></SPAN></B> <FONT color=#000000><B><SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">身份认证</SPAN></B></FONT></FONT></FONT></P>
<P><FONT color=#000000><FONT size=4><SPAN style="FONT-FAMILY: 宋体">我要确保,给我发公钥的</SPAN><FONT face=宋体><SPAN lang=EN-US xml:lang="EN-US">XX</SPAN><SPAN style="FONT-FAMILY: 宋体">是招商银行那个</SPAN><SPAN lang=EN-US xml:lang="EN-US">XX</SPAN><SPAN style="FONT-FAMILY: 宋体">(第一步就不能出现冒牌货)。可是在现在这个混暗的社会,我该相信谁呢?经过这么多年,终于被我找到了,哈哈。答案就是证书!!!</SPAN></FONT></FONT></FONT></P>
<P><FONT color=#000000><FONT size=4><SPAN style="FONT-FAMILY: 宋体">开个玩笑。银行去一个公认的机构(所谓的证书颁发机构)领取一个含有他名称的证书(其中还有公钥)。而我呢,是信任这个机构的因此我信任这个证书,所以我信任给我证书的这个</SPAN><FONT face=宋体><SPAN lang=EN-US xml:lang="EN-US">XX</SPAN><SPAN style="FONT-FAMILY: 宋体">就是银行。</SPAN></FONT></FONT></FONT></P>
<P><FONT color=#000000><FONT size=4><SPAN style="FONT-FAMILY: 宋体">关于证书又可以写一篇文章了。这里仅涉及证书的使用和如何能利用它来进行身份认证。其他信息如证书管理和申请可以参考:</SPAN><FONT face=宋体><SPAN lang=EN-US xml:lang="EN-US">Apache Document 2.0</SPAN><SPAN style="FONT-FAMILY: 宋体">。</SPAN></FONT></FONT></FONT></P>
<P><SPAN style="FONT-FAMILY: 宋体"><FONT color=#000000 size=4>有了证书,我就可以通过验证证书,得到银行公钥,改善过的通讯过程如下:</FONT></SPAN></P>
<P><FONT color=#000000><FONT size=4><B><SPAN style="FONT-FAMILY: 宋体">我</SPAN><FONT face=宋体> <SPAN lang=EN-US xml:lang="EN-US">-&gt;</SPAN></FONT></B><FONT face=宋体> <B><SPAN style="FONT-FAMILY: 宋体">招商银行</SPAN></B><SPAN style="FONT-FAMILY: 宋体">:</SPAN><SPAN lang=EN-US xml:lang="EN-US">hi,</SPAN> <SPAN style="FONT-FAMILY: 宋体">招行?</SPAN></FONT></FONT></FONT></P>
<P><FONT color=#000000><FONT size=4><B><SPAN style="FONT-FAMILY: 宋体">招商银行</SPAN><FONT face=宋体> <SPAN lang=EN-US xml:lang="EN-US">-&gt;</SPAN></FONT></B><B><SPAN style="FONT-FAMILY: 宋体">我</SPAN></B><SPAN style="FONT-FAMILY: 宋体">:我就是招商银行</SPAN><FONT face=宋体><SPAN lang=EN-US xml:lang="EN-US">+</SPAN><SPAN style="FONT-FAMILY: 宋体">证书。</SPAN></FONT></FONT></FONT></P>
<P><FONT color=#000000><FONT size=4><B><SPAN style="FONT-FAMILY: 宋体">我</SPAN><FONT face=宋体> <SPAN lang=EN-US xml:lang="EN-US">-&gt;</SPAN></FONT></B><FONT face=宋体> <B><SPAN style="FONT-FAMILY: 宋体">招商银行</SPAN></B><SPAN style="FONT-FAMILY: 宋体">:给个理由先</SPAN></FONT></FONT></FONT></P>
<P><FONT color=#000000><FONT size=4><B><SPAN style="FONT-FAMILY: 宋体">招商银行</SPAN><FONT face=宋体> <SPAN lang=EN-US xml:lang="EN-US">-&gt;</SPAN></FONT></B><FONT face=宋体> <B><SPAN style="FONT-FAMILY: 宋体">我</SPAN></B><SPAN style="FONT-FAMILY: 宋体">:我就是招商银行</SPAN><SPAN lang=EN-US xml:lang="EN-US">+</SPAN><SPAN style="FONT-FAMILY: 宋体">银行私钥加密</SPAN><SPAN lang=EN-US xml:lang="EN-US">{</SPAN><SPAN style="FONT-FAMILY: 宋体">“我就是招商银行”</SPAN><SPAN lang=EN-US xml:lang="EN-US">+</SPAN> <SPAN style="FONT-FAMILY: 宋体">该消息摘要</SPAN><SPAN lang=EN-US xml:lang="EN-US">}</SPAN></FONT></FONT></FONT></P>
<P><FONT color=#000000><FONT size=4><SPAN style="FONT-FAMILY: 宋体">在我这里,是信任几个顶级的证书颁发机构,因此我这里有这些颁发机构的公钥。我用公钥解开这个证书,确认其中这个机构的数字签名,即可以认定证书的是真的。也就确认了这个</SPAN><FONT face=宋体><SPAN lang=EN-US xml:lang="EN-US">XX</SPAN><SPAN style="FONT-FAMILY: 宋体">是招商银行,同时从证书中得到银行的公钥,但仅有这步是不够的。我还需要确认和我通讯的这个</SPAN><SPAN lang=EN-US xml:lang="EN-US">XX</SPAN><SPAN style="FONT-FAMILY: 宋体">有该公钥对应的私钥。于是后两步依然如前。</SPAN></FONT></FONT></FONT></P>
<P><FONT color=#000000><FONT size=4><SPAN style="FONT-FAMILY: 宋体">至此,</SPAN><FONT face=宋体> <SPAN lang=EN-US xml:lang="EN-US">SSL</SPAN><SPAN style="FONT-FAMILY: 宋体">通讯中的过程就如此了。为了技术的讲解,把整个通讯过程简化了。实际过程更加复杂。有兴趣的可以继续往下看。</SPAN></FONT></FONT></FONT></P>
<P><SPAN style="FONT-FAMILY: 宋体"><FONT color=#000000 size=4>抓包中实际的交互过程:</FONT></SPAN></P>
<P><FONT color=#000000><FONT face=宋体><FONT size=4><B><SPAN lang=EN-US xml:lang="EN-US">a. Client -&gt; Server</SPAN></B><B><SPAN style="FONT-FAMILY: 宋体">:</SPAN><SPAN lang=EN-US xml:lang="EN-US">Client Hello</SPAN></B></FONT></FONT></FONT></P>
<P><FONT color=#000000><FONT face=宋体><FONT size=4><B><SPAN lang=EN-US xml:lang="EN-US">b. Server -&gt; Client</SPAN></B><B><SPAN style="FONT-FAMILY: 宋体">:</SPAN><SPAN lang=EN-US xml:lang="EN-US">Server Hello, Certificate, Server Hello Done</SPAN></B></FONT></FONT></FONT></P>
<P><FONT color=#000000><FONT face=宋体><FONT size=4><B><SPAN lang=EN-US xml:lang="EN-US">c. Client -&gt; Server</SPAN></B><B><SPAN style="FONT-FAMILY: 宋体">:</SPAN><SPAN lang=EN-US xml:lang="EN-US">Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message</SPAN></B></FONT></FONT></FONT></P>
<P><FONT color=#000000><FONT face=宋体><FONT size=4><B><SPAN lang=EN-US xml:lang="EN-US">d. Server -&gt; Client</SPAN></B><B><SPAN style="FONT-FAMILY: 宋体">:</SPAN><SPAN lang=EN-US xml:lang="EN-US">Change Cipher Spec, Encrypted Handshake Message</SPAN></B></FONT></FONT></FONT></P>
<P><FONT color=#000000><FONT face=宋体><FONT size=4><B><SPAN lang=EN-US xml:lang="EN-US">e. Client -&gt; Server</SPAN></B><B><SPAN style="FONT-FAMILY: 宋体">:</SPAN><SPAN lang=EN-US xml:lang="EN-US">Application data</SPAN></B></FONT></FONT></FONT></P>
<P><FONT color=#000000><FONT face=宋体><FONT size=4><B><SPAN lang=EN-US xml:lang="EN-US">f. Server -&gt; Client</SPAN></B><B><SPAN style="FONT-FAMILY: 宋体">:</SPAN><SPAN lang=EN-US xml:lang="EN-US">Application data</SPAN></B></FONT></FONT></FONT></P>
<P><FONT color=#000000><FONT face=宋体><FONT size=4><SPAN lang=EN-US xml:lang="EN-US">a, b, c, d</SPAN><SPAN style="FONT-FAMILY: 宋体">四步是握手阶段,这里要经过,协商密码组,身份验证,数据通讯过程中使用的方式等等。分步讲解:</SPAN><SPAN lang=EN-US xml:lang="EN-US"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN></SPAN></FONT></FONT></FONT></P>
<P><SPAN lang=EN-US xml:lang="EN-US"><FONT color=#000000 size=4 face=宋体>a. Client Hello:</FONT></SPAN></P>
<P><FONT color=#000000><FONT size=4><SPAN style="FONT-FAMILY: 宋体">客户端向服务器发送客户</SPAN><FONT face=宋体><SPAN lang=EN-US xml:lang="EN-US">SSL</SPAN> <SPAN style="FONT-FAMILY: 宋体">版本号、<B>加密算法设置</B>、随机数</SPAN><SPAN lang=EN-US xml:lang="EN-US">(32</SPAN><SPAN style="FONT-FAMILY: 宋体">位时间戳和</SPAN><SPAN lang=EN-US xml:lang="EN-US">28</SPAN> <SPAN style="FONT-FAMILY: 宋体">字节随机序列</SPAN><SPAN lang=EN-US xml:lang="EN-US">)</SPAN><SPAN style="FONT-FAMILY: 宋体">、会话</SPAN><SPAN lang=EN-US xml:lang="EN-US">ID</SPAN><SPAN style="FONT-FAMILY: 宋体">、客户支持的密码算法列表</SPAN><SPAN lang=EN-US xml:lang="EN-US">(CipherSuite)</SPAN> <SPAN style="FONT-FAMILY: 宋体">和客户支持的压缩算法列表。</SPAN></FONT></FONT></FONT></P>
<P><SPAN lang=EN-US xml:lang="EN-US"><FONT color=#000000><FONT face=宋体><FONT size=4><SPAN>&nbsp;&nbsp;</SPAN> b. Server Hello:</FONT></FONT></FONT></SPAN></P>
<P><FONT color=#000000><FONT face=宋体><FONT size=4><SPAN lang=EN-US xml:lang="EN-US"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN></SPAN> <SPAN style="FONT-FAMILY: 宋体">服务器向客户端发送服务器的</SPAN><SPAN lang=EN-US xml:lang="EN-US">SSL</SPAN> <SPAN style="FONT-FAMILY: 宋体">版本号、从客户信息中选择的<B>加密算法</B>和压缩算法、随机产生的数据和其他客户需要用于和服务器通信的数据</SPAN><SPAN lang=EN-US xml:lang="EN-US">.</SPAN> <SPAN style="FONT-FAMILY: 宋体">另外</SPAN><SPAN lang=EN-US xml:lang="EN-US">,</SPAN> <SPAN style="FONT-FAMILY: 宋体">服务器还要发送自己的证书证明身份。如果服务器需要验证客户端身份,这里还要去请求客户端的证书。</SPAN></FONT></FONT></FONT></P>
<P><FONT color=#000000><FONT face=宋体><FONT size=4><SPAN lang=EN-US xml:lang="EN-US"><SPAN>&nbsp;&nbsp;</SPAN></SPAN> <SPAN style="FONT-FAMILY: 宋体">客户用服务器发送来的数字证书验证服务器身份</SPAN><SPAN lang=EN-US xml:lang="EN-US">.</SPAN> <SPAN style="FONT-FAMILY: 宋体">如果认证不成功</SPAN><SPAN lang=EN-US xml:lang="EN-US">,</SPAN> <SPAN style="FONT-FAMILY: 宋体">用户将得到一个警告</SPAN><SPAN lang=EN-US xml:lang="EN-US">,</SPAN> <SPAN style="FONT-FAMILY: 宋体">加密连接无法建立</SPAN><SPAN lang=EN-US xml:lang="EN-US">;</SPAN> <SPAN style="FONT-FAMILY: 宋体">如果成功:</SPAN></FONT></FONT></FONT></P>
<P><SPAN lang=EN-US xml:lang="EN-US"><FONT color=#000000><FONT face=宋体><FONT size=4><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN> c. <B>Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message</B></FONT></FONT></FONT></SPAN></P>
<P><FONT color=#000000><FONT face=宋体><FONT size=4><SPAN lang=EN-US xml:lang="EN-US"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN></SPAN> <SPAN style="FONT-FAMILY: 宋体">客户端发送“</SPAN><SPAN lang=EN-US xml:lang="EN-US">Client Key Exchange</SPAN><SPAN style="FONT-FAMILY: 宋体">”消息,其中内容是由服务器的公钥加密;同时产生会话密钥,发送“</SPAN><SPAN lang=EN-US xml:lang="EN-US">Change Cipher Spec</SPAN><SPAN style="FONT-FAMILY: 宋体">”消息。</SPAN></FONT></FONT></FONT></P>
<P><SPAN lang=EN-US xml:lang="EN-US"><FONT color=#000000><FONT face=宋体><FONT size=4><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN> d. <B>Change Cipher Spec, Encrypted Handshake Message</B></FONT></FONT></FONT></SPAN></P>
<P><FONT face=宋体><FONT size=4><SPAN lang=EN-US xml:lang="EN-US"><SPAN><FONT color=#000000>&nbsp;</FONT></SPAN></SPAN> <SPAN style="FONT-FAMILY: 宋体"><FONT color=#000000>服务器发送此消息表明,支持更换使用改密码组,后面的握手消息使用服务器的密钥加密。至此握手过程完成。客户端和服务器段建立起一个安全的连接。用此连接传输应用层数据。</FONT></SPAN></FONT></FONT></P>
<P><SPAN lang=EN-US xml:lang="EN-US"><FONT color=#000000><FONT face=宋体><FONT size=4>&nbsp;</FONT></FONT></FONT></SPAN></P><FONT color=#000000><FONT size=4><SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt">&nbsp;&nbsp;&nbsp; 总结,文中没有涉及服务器端对客户端的身份验证(即:<A href="http://www.willrey.com/" target=_blank>维瑞电子商务</A>代理的SSL双证书),相应的也没有数字签名。有兴趣的朋友可以自己找资料参考。另外最后的通讯过程详解,自我感觉一般,仅读过</SPAN><FONT face=宋体><SPAN style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt" lang=EN-US xml:lang="EN-US">RFC2246</SPAN><SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt">的附录,没对重要内容作研究。欢迎大家指出错误,肉包非常谢谢。最后感谢友情客串:花水,支付包,招商银行和</SPAN><SPAN style="FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 10.5pt" lang=EN-US xml:lang="EN-US">XX</SPAN><SPAN style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt">。</SPAN></FONT></FONT></FONT></DIV></DIV></DIV></DIV></DIV>
页: [1]
查看完整版本: SSL通讯原理 (生活版)