12.1.1 安全连接.htm
来自「Windows2000后台服务程序开发手册」· HTM 代码 · 共 734 行 · 第 1/5 页
HTM
734 行
href="http://e-msbooks.com/relaunch/XML/paser.asp?src=957-2085-84-0_211.xml#"
target=_new>第十一章</A> 的内容)。</FONT> </P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>SSL是一个安全性通讯协定,它不像其他通讯协定一样与Windows安全性模组紧密结合。SSL是一个以凭证为基础的通讯协定,Windows必须在服务器可以执行模拟(Impersonate)之前即做到凭证资讯的对应(模拟的内容在第十一章中有详细的讨论)。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e72d7
size=4><B style="LINE-HEIGHT: 25px">NTLM<BR
style="LINE-HEIGHT: 25px"> </B></FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>NTLM是Windows家族现行的安全性通讯协定。它可以在Windows 2000、Windows NT及Windows
95/98中使用。尽管Kerberos比NTLM提供了某些值得注意的改进,您仍旧必须了解NTLM的内容。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>NTLM通讯协定相当易懂,而且是以挑战/回应(Challenge/Response)顺序为基础。说明于图12-1中,其执行步骤如下所示:</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"> 步骤一 </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"> 步骤二 </B></FONT>服务器转送这些资讯到网域控制站(Domain
Controller,DC)。<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"> 步骤叁 </B></FONT>DC产生一个<FONT
style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 挑战(Challenge) </B></FONT>,它是用客户端的密码(只有客户端及DC知道)随机地产生及建立的。<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"> 步骤四 </B></FONT>DC传送挑战到服务器。<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"> 步骤五 </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"> 步骤六 </B></FONT>客户端使用它的密码检查挑战的内容,并且对挑战执行<FONT
style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 已知的修改(known
modification) </B></FONT>,产生<FONT style="LINE-HEIGHT: 25px"
face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 回应(Response) </B></FONT>。已知的修改由NTLM通讯协定定义。<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"> 步骤七 </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"> 步骤八 </B></FONT>服务器转送回应到DC。<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"> 步骤九 </B></FONT>DC使用经由已知的修改修正过之原始挑战检查及验证回应的内容。客户端现在已经被认证。<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"> 步骤十 </B></FONT>DC通知服务器客户端已经被认证。<BR
style="LINE-HEIGHT: 25px"><A style="LINE-HEIGHT: 25px"
name=631_1><BR style="LINE-HEIGHT: 25px">
<CENTER style="LINE-HEIGHT: 25px">
<P><INPUT id=1 style="LINE-HEIGHT: 25px" type=image height=417
width=550 src="12.1.1 安全连接.files/12-1.gif" border=0
onclick="imgclick"> </P></CENTER>
<CENTER style="LINE-HEIGHT: 25px">
<TABLE border=0>
<TBODY style="LINE-HEIGHT: 25px">
<TR>
<TD align=middle><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"> 图12-1 </B></FONT>NTLM验证</FONT></TD></TR></TBODY></TABLE></A></FONT></CENTER></LI></UL><A
style="LINE-HEIGHT: 25px" name=631_1>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>如图12-1所示,由NTLM产生的网路流量是值得注意的,而且服务器承担着大量的责任,即使它主要是在客户端及网域控制站(DC)之间扮演Proxy的角色。但是这个通讯协定的确是完成了这个工作。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e72d7
size=4><B style="LINE-HEIGHT: 25px">Kerberos<BR
style="LINE-HEIGHT: 25px"> </B></FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>如同上一节所提到的,NTLM是所有Microsoft桌上型电脑作业系统都支援的唯一一个安全性通讯协定。由于这个原因,它在企业的服务器开发中仍然扮演者非常重要的角色。Kerberos是Windows
2000的闪亮之星,它提供了很多极好的特色:</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"> 彼此验证(Mutual
authentication) </B></FONT>除了更多经由服务的常见客户端验证外,Kerberos提供一种让客户端也能确认服务器身分的机制。这种验证有效地经由Kerberos而实现,不需要客户端做第二次的验证。<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"> 委派(Delegation) </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"> 有效的验证 </B></FONT>在Kerberos验证的行程中要求最小的通讯行程,而且只有单一的通讯行程必须由服务器执行(或者假如客户端是彼此验证的,则为两个通讯行程)。这样一来,可从服务器中移除许多负载,并把责任转移到客户端。<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"> Kerberos是个标准 </B></FONT>Kerberos验证系统是MIT设计之Athena专案的一部分。Windows
2000实作了RFC 1510中定义的Kerberos V5.0。就本身而言,Windows
2000能够与使用Kerberos通讯的其他作业系统互相运作。<BR style="LINE-HEIGHT: 25px">
</LI></UL></FONT>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>Kerberos是Greek神话中看守地狱入口之叁头兽的名字。Kerberos通讯协定以这个神话动物的名字命名,因为它也有叁个元件:</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"> 客户端 </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"> 服务器 </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"> 金钥发行中心(Key Distribution
Center,KDC) </B></FONT>一个客户端及服务器所信任的实体,并为它们管理验证。<BR
style="LINE-HEIGHT: 25px"> </LI></UL></FONT>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>每个实体在Kerberos规格中扮演着重要的角色。以下的Kerberos叙述将为您解释一些重要的术语及概念,但是在应用程序中使用Kerberos之前,并不需要完全了解其内容。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e74d7
size=3><B style="LINE-HEIGHT: 25px">Kerberos验证<BR
style="LINE-HEIGHT: 25px"> </B></FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>Kerberos使用对称性金钥加密的方法。服务器使用Kerberos验证客户端的解密封包,即是<FONT
style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 授权者(authenticator) </B></FONT>,它由客户端传送并且包含加密客户端身分识别及时戳(Timestamp)的副本(用来避免透过线路的授权者复制及重复使用它)。只有客户端及服务器能够用这个金钥加密或解密此授权者,它保证是机密的,而且也只有它们知道。这个秘密金钥为<FONT
style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 工作阶段金钥(session
key) </B></FONT>,这个工作阶段金钥也是客户端及服务器在工作阶段期间继续通讯时用来加密资料的金钥。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>Kerberos验证到目前为止是相当简单的,但是如同您所猜想的,Kerberos真正的魅力是在协商<FONT
style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 工作阶段金钥(session
key) </B></FONT>的部份。工作阶段金钥必须是唯一的,而且是一个只有通讯实体才知道的机密-即客户端及服务器。以下是一些较有争议的问题:</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>我将每次讨论一个步骤,回答这些问题的程序,但是您要先了解Kerberos协定的许可证(Ticket)概念。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?