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