12.1.1 安全连接.htm
来自「Windows2000后台服务程序开发手册」· HTM 代码 · 共 734 行 · 第 1/5 页
HTM
734 行
style="MARGIN-LEFT: 20px; LINE-HEIGHT: 25px"
ondragover="return tab1_ondragover()"><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>服务器软件必须以安全的方式通讯。不管您花多少时间及努力,把存取控制及安全性用在您系统的物件上;如果您的服务器没有确定两件事,则您的投入不会有任何意义:</FONT><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2>
<UL style="LINE-HEIGHT: 25px">
<LI
style="LINE-HEIGHT: 25px">您的服务器必须确定客户端的身份,也就是说,您的服务器必须能够验证正在与它通讯之另一方的身份。<BR
style="LINE-HEIGHT: 25px">
<LI
style="LINE-HEIGHT: 25px">您的服务器必须能够保证与客户端之间所传递的资讯未被第叁者篡改(或可能被检视)。<BR
style="LINE-HEIGHT: 25px"> </LI></UL></FONT>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>通常服务器软件在主控它的系统上拥有许多权利-假如您的服务器可以确定上述两件事,则您可以放心,它的权力不会被滥用,而且系统具有适当的安全性。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>开发人员在Microsoft Windows
2000上执行服务的挑战,是使用一种与Windows安全性模组结合良好的方式验证客户端,以及使服务能够与这些客户端安全地通讯。认识这个挑战是本章的重点,但是我会先说明一些历史并解释某些术语的意义。</FONT></P><A
style="LINE-HEIGHT: 25px" name=212001>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e70d7
size=5><B style="LINE-HEIGHT: 25px">加密(Encryption)<BR
style="LINE-HEIGHT: 25px"> </B></FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>加密是构成安全通讯的基础。它是个庞大的主题,本章和任何一本单独的书都无法完全地涵盖这部份。本节的目的是提供相关主题的背景资料,及说明某些基本的概念和重要术语。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>两个以上的通讯方可使用加密的方式,安全地分享资讯。一般说来,当某一方没有金钥时,使用这种方式修改的资料就无法被复原成原始的状态。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>金钥是一个数值,被加密演算法用来对资料做加密用;金钥也是被用来对资料解密的数值,修改后的资料形式即是<FONT
style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 加密 </B></FONT>。接收方可以使用这个金钥来复原资料(使资料可被理解),即<FONT
style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 解密 </B></FONT>程序。资料加密及解密的研究被称为<FONT
style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 密码学 </B></FONT>。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>密码学通常被用来在不安全的通讯媒介上,保证符合以下所列的一或叁个目标:</FONT></P><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2>
<UL style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 私密性(Privacy) </B></FONT>除了预期通讯的双方外,没有人能理解通讯中的资料。<BR
style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 验证性(Authentication) </B></FONT>表示您已经确认与您通讯之另一方的身份。<BR
style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 完整性(Integrity) </B></FONT>收到的资料不会在传输中被第叁者篡改。<BR
style="LINE-HEIGHT: 25px"> </LI></UL></FONT>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e72d7
size=4><B style="LINE-HEIGHT: 25px">对称性金钥加密(Symmetric Key
Encryption)<BR style="LINE-HEIGHT: 25px"> </B></FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>通常,当人们谈到加密通讯时,他们会提及在两方之间分享一个唯一的金钥,同样的金钥被用在资料的加密及解密,称为<FONT
style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 对称性金钥加密 </B></FONT>。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>对称性金钥加密只适合在两方分享一个秘密的合理环境中。随着本章的内容,您将看到使用对称性金钥加密的Microsoft
Windows NT LAN Manager(NTLM)及Windows
2000使用的Kerberos安全性通讯协定(在本章稍后讨论)。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>然而,有些情况下的对称性金钥加密并不符合标准。以下是其中一些原因:</FONT></P><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2>
<UL style="LINE-HEIGHT: 25px">
<LI
style="LINE-HEIGHT: 25px">两方必须持有对称性金钥,并要求对方传递这些金钥。金钥的传递可能会造成安全性的漏洞。<BR
style="LINE-HEIGHT: 25px">
<LI
style="LINE-HEIGHT: 25px">两方必须互相信任,以使用这个金钥。某一方能用金钥作的事,另一方也能。当一位已知的当事人与另一个不熟悉的当事人通讯时,这是重要的。<BR
style="LINE-HEIGHT: 25px"> </LI></UL></FONT>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>这些论点似乎在对方需要用安全方式与另一方通讯的环境中,产生无法克服的问题,例如一个企业内的区域网路(LAN)。然而,在已知的实体环境,例如公司网路或Windows网域中,对称性金钥加密可被用来产生非常优美与安全通讯的解决办法。您将在本章稍后的Kerberos主题讨论中,看到关于这方面的范例。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e72d7
size=4><B style="LINE-HEIGHT: 25px">非对称性(Asymmetric)或公开金钥(Public
Key)加密<BR style="LINE-HEIGHT: 25px"> </B></FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>Internet建立了一个安全通讯的环境,甚至在一个或多个通讯当事人彼此间没有事先了解的情形下也是如此。在Internet的环境中,如果每一方皆分享一个秘密金钥,是无法实行的。这就是<FONT
style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 非对称性 </B></FONT>或<FONT
style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 公开金钥 </B></FONT>加密杰出的地方。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>公开金钥加密利用两个金钥,分别是用来分享的<FONT style="LINE-HEIGHT: 25px"
face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 公开金钥 </B></FONT>,及必须保密的<FONT
style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 私密金钥 </B></FONT>。经由成对的公开金钥加密后的资料只能使用私密金钥解密;相反地,用成对的私密金钥加密的资料只能用公开金钥解密。您不能从公开金钥中取得成对的私密金钥。然而,如果使用暴力攻击(brute-force)技巧,则可以列举所有可能的私密金钥,直到找出与公开金钥相配的一个。当金钥的宽度增加,这个方法会变得无法计算且更加困难。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>如您所见,像这样的系统有许多可能性。您可以发布您的公开金钥,以使想要与您通讯的代理程序用您的公开金钥加密它的资料,此时只有您可以阅读资料,因为只有您持有私密金钥。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>不幸的是,使用非对称性之成对的(公开/私密)金钥加密及解密资料的演算法速度比使用对称性金钥加密的演算法慢。因为这样,在使用非对称性金钥加密大量的资料时,通常是不适当的。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>为了避开这个问题,许多通讯协定利用公开金钥加密方式来传递对称性金钥。然后在其馀的会谈或「工作阶段」期间使用对称性金钥加密。这样一来,在享有对称性金钥加密效率的同时,也能实现公开金钥加密的优点。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e72d7
size=4><B style="LINE-HEIGHT: 25px">数位凭证(Digital Certificate)<BR
style="LINE-HEIGHT: 25px"> </B></FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e80d7
size=2><B
style="LINE-HEIGHT: 25px"> 数位凭证 </B></FONT>或<FONT
style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 凭证 </B></FONT>是在一对非对称性金钥中封装或发行公开金钥的方法。数位凭证也可以包含例如金钥拥有者及凭证用法的附加资讯。</FONT></P>
<HR style="LINE-HEIGHT: 25px">
<P><FONT style="LINE-HEIGHT: 25px" face=Arial color=#3e77d7 size=3
Black><B style="LINE-HEIGHT: 25px">说明</B></FONT> </P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>不要将非对称性成对金钥中的私密金钥封装在凭证里,因为它不应该被发行。应由其拥有者保存。</FONT></P>
<HR style="LINE-HEIGHT: 25px">
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>假如您能验证凭证的有效性,就可以使用凭证内持有的公开金钥将来自凭证拥有者的资料加以解密。用这种方法,您可以信任这个资料及资料的来源。同样地,假如您信任凭证的有效性,则您可以使用在凭证中找到的公开金钥,以对资料做加密,只有合法的凭证拥有者可以将资料解密。当您在某个安全的商业Web网站上,例如Amazon.com或Ebay.com,使用您的Web浏览器传递信用卡资讯时,就会使用到这类的技术。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>一个重要的部份是利用您软件的能力去验证凭证的有效性,并因此信任公开金钥的有效性。这个实体即是凭证授权单位,或称CA。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>凭证由CA发行,它用自己的公开金钥签署这个凭证。由于对凭证的签署,CA保证凭证中所持有的资讯是正确的,包括公开金钥。就这个CA而言,如果您持有CA的公开金钥(我们马上会讨论到更多细节),则表示您可以确定此凭证的签章未被篡改。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>您所信任的实体是凭证授权单位,它发行讨论中所提的凭证。客户端经由持有CA公开金钥的副本来信任凭证授权单位,并且用它来验证收到凭证的签章。一旦客户端验证这个签章,它可以选择在信任凭证中找到的资讯是否以它与CA的信任关系为基础。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>有两个凭证授权单位的例子,包括VeriSign,可以在 </FONT></A><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2><A
style="LINE-HEIGHT: 25px" href="http://www.verisign.com/"
target=_new>http://www.verisign.com/</A> 找到,以及Thawte,可以在 <A
style="LINE-HEIGHT: 25px" href="http://www.thawte.com/"
target=_new>http://www.thawte.com/</A> 找到。还有更多相关的实例。</FONT>
</P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>依您所需的情形,您可能会发现,使用Microsoft Certificate
Services或类似的软件来建立您自己的CA会成为您的优势。这样做可让您在您自己的企业或Internet环境中建立及分配凭证。潜在地增加凭证的弹性可以替您省下凭证许可的费用。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>我无法在本章全面讨论凭证的内容,但是它是一个值得注意的重要技术。当我们在讨论安全通讯端阶层(Secure Sockets
Layer,SSL)安全性通讯协定时,本章将再次讨论凭证的内容。有关这个主题的更广泛讨论,我建议您参阅《Platform
SDK》文件或在World Wide Web上搜寻这个主题。</FONT></P><A
style="LINE-HEIGHT: 25px" name=212002>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e70d7
size=5><B style="LINE-HEIGHT: 25px">安全性通讯协定<BR
style="LINE-HEIGHT: 25px"> </B></FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>通讯协定已经被定义用来初始及实作安全的通讯。不同的通讯协定可以符合不同的需求,而我们将在本章讨论叁种通讯协定:Kerberos、NTLM及SSL。选择这些通讯协定是因为Windows
2000为它们提供了特殊的支援,以及它们在现存环境中(如Internet)的重要性。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>安全性通讯协定主要被设计于以定义好的方式使用加密技术和网路通讯技术,实作一个或叁个本章前面所提的目标:即私密性、验证性及完整性。这叁个我们将讨论的通讯协定,以不同的等级达成这些目标。某些通讯协定的额外特色是委派及彼此认证。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>Kerberos及NTLM安全性通讯协定是Windows
2000安全性不可或缺的部分。就其本身而言,这些通讯协定可以被直接用来验证网域中的使用者。服务器可以使用Kerberos及NTLM安全性通讯协定撷取客户端的存取权杖(Token)(有关权杖的细节,请参阅 </FONT></A><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2><A
style="LINE-HEIGHT: 25px"
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?