12.1.3 安全连接.htm

来自「Windows2000后台服务程序开发手册」· HTM 代码 · 共 664 行 · 第 1/4 页

HTM
664
字号
                  size=2>一个无效的handle被传递到某个函数中。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_INVALID_TOKEN</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>一个无效的权杖被传递到某个函数中。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_NOT_SUPPORTED</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>指定的支援提供者不支援所要求的特色。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_QOP_NOT_SUPPORTED</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>指定的支援提供者不支援quality-of-protection属性。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_NO_IMPERSONATION</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                size=2>提供的环境没有模拟权杖。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_TARGET_UNKNOWN</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>目标未知。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_SECPKG_NOT_FOUND</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
              size=2>指定的安全套件未知。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_NO_IMPERSONATION</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
              size=2>模拟不被环境允许。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_LOGON_DENIED</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>原则无法登录,因为它不持有要求的凭证。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_UNKNOWN_CREDENTIALS</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
              size=2>提供的凭证不被承认。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_NO_CREDENTIALS</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>凭证无效。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_MESSAGE_ALTERED</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>验证或加密提供的讯息已经在传输中被修改。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_OUT_OF_SEQUENCE</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                size=2>验证提供的讯息脱离了顺序。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_NO_AUTHENTICATING_AUTHORITY</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                size=2>无法到达KDC或DC。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_CONTEXT_EXPIRED</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>一个届期的环境,而且现在无效。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_INCOMPLETE_MESSAGE</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
              size=2>提供的讯息不完整。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_I_CONTINUE_NEEDED</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>环境不完整,而且函数必须被再次呼叫。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_I_COMPLETE_NEEDED</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>函数完整,但是您必须呼叫Complete AuthToken。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_I_COMPLETE_AND_CONTINUE</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>您必须呼叫CompleteAuthToken,并且重覆执行并再次呼叫函数。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_I_INCOMPLETE_CREDENTIALS</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>远端的那方要求更完整的凭证。若客户端的现行凭证是匿名的,可以适用这个状态码。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_I_RENEGOTIATE</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>远端的那方要求的凭证被重新协商。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SEC_E_INSUFFICIENT_MEMORY</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
              size=2>提供的缓冲器太小。</FONT></TD></TR></TBODY></TABLE></CENTER>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>以下所列的程序代码片段显示了常见呼叫AcquireCredentialsHandle函数的情形:</FONT></P>
            <DIV style="LINE-HEIGHT: 25px; BACKGROUND-COLOR: #d7d7d7"><FONT 
            style="LINE-HEIGHT: 25px" face=Arial size=3><PRE style="LINE-HEIGHT: 25px">CredHandle hCredentials;&nbsp;&nbsp;<BR>TimeStamp tsExpires; <BR>ss = AcquireCredentialsHandle(NULL, MICROSOFT_KERBEROS_NAME, <BR> SECPKG_CRED_BOTH, NULL, NULL, NULL, <BR> NULL, &amp;hCredentials, &amp;tsExpires ); <BR>ReportSSPIError(L"AcquireCredentialsHandle", ss); <BR>if(ss != SEC_E_OK){ <BR> // 错误 <BR>}</PRE></FONT></DIV>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>假如这个呼叫执行成功,hCredentials变数将会持有一个有效的handle,可以在彼此验证的Kerberos会谈中使用。当您用完这个handle后,请把它传递到FreeCredentialsHandle函数中释放它:</FONT></P>
            <DIV style="LINE-HEIGHT: 25px; BACKGROUND-COLOR: #d7d7d7"><FONT 
            style="LINE-HEIGHT: 25px" face=Arial size=3><PRE style="LINE-HEIGHT: 25px">SECURITY_STATUS FreeCredentialsHandle( <BR> PCredHandle phCredential);</PRE></FONT></DIV>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>现在您已经拥有凭证的handle,可以开始验证的程序。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e72d7 
            size=4><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>如您所知,客户端及服务器的验证程序并不相同。因为验证通常从客户端开始,所以我们先用客户端的InitializeSecurityContext函数开始说明验证程序的内容。</FONT></P>
            <DIV style="LINE-HEIGHT: 25px; BACKGROUND-COLOR: #d7d7d7"><FONT 
            style="LINE-HEIGHT: 25px" face=Arial size=3><PRE style="LINE-HEIGHT: 25px">SECURITY_STATUS InitializeSecurityContext( <BR> PcredHandle phCredential, <BR> PCtxtHandle phContext, <BR> SEC_CHAR *pszTargetName, <BR> ULONG lContextReq, <BR> ULONG lReserved1, <BR> ULONG lTargetDataRep, <BR> PSecBufferDesc pInput, <BR> ULONG lReserved2, <BR> PCtxtHandle phNewContext, <BR> PSecBufferDesc pOutput, <BR> PULONG plContextAttr, <BR> PTimeStamp ptsExpiration);</PRE></FONT></DIV>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>InitializeSecurityContext函数的第一个参数是您使用AcquireCredentialsHandle函数所收到的凭证handle。InitializeSecurityContext函数意图在回圈中多次呼叫某些参数。然而,有某些参数与您每次呼叫函数时并不相关。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>我们先就您第一次呼叫这个函数的部份来讨论这些参数,然后再指出后续在呼叫InitializeSecurityContext的差别。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>phContext结构在您第一次呼叫这个函数时为NULL值(在未来的呼叫中,它将会指向CtxtHandle变数的指标,此变数持有「进行中」的环境handle)。pszTargetName是您向服务器验证的使用者名称。假如服务器在主控机器上的系统帐户中执行,则pszTargetName为机器名称。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>lContextReq参数是您向SSPI及服务器指出想要从安全会谈中获得什么内容的方法。表12-7中列出可以传递给lContextReq的标记。</FONT></P>
            <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">&nbsp;表12-7&nbsp;</B></FONT>您可以传递给InitializeSecurityContext之lContextReq参数的标记</FONT></TD></TR></TBODY></TABLE></CENTER>
            <CENTER style="LINE-HEIGHT: 25px">
            <TABLE border=1>
              <TBODY style="LINE-HEIGHT: 25px">
              <TR>
                <TH style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>标记</FONT> </TH>
                <TH style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>说明</FONT></TH></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>ISC_REQ_DELEGATE</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>服务器被允许委派客户端的使用者内容。这个委派动作使服务器能够扮演客户端,表示还有另一个服务器代表客户端。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>ISC_REQ_MUTUAL_AUTH</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>假如您设定了这个标记,服务器必须也能够向客户端验证它自己。NTLM协定不支援彼此验证的方式,但是Kerberos支援。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>ISC_REQ_REPLAY_DETECT</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>这个标记指出您想要的安全性套件签章讯息,这可使恶意的第叁方无法执行Replay攻击。这个标记中包含了ISC_REQ_INTEGRITY标记。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>ISC_REQ_SEQUENCE_DETECT</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SSPI将察觉这个工作阶段环境中,脱离顺序的讯息。也要求讯息签章及包含ISC_REQ_INTEGRITY标记。</FONT></TD></TR>
              <TR>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?