身份验证级别

身份验证级别控制着客户端或服务器要从其 SSP 获得的安全性水平。 通过 dwAuthnLevel 参数将适当的 RPC_C_AUTHN_LEVEL_xxx 值传递给 CoInitializeSecurityCoSetProxyBlanket 来设置身份验证级别。 在握手过程中,会比较客户端和服务器的身份验证级别,并在连接中使用级别较高的安全保护设置。

从最低安全保护级别到最高安全保护级别,不同的身份验证级别介绍如下:

无 (RPC_C_AUTHN_LEVEL_NONE)

客户端和服务器之间的通信不会进行身份验证。 所有安全设置都会被忽略。 只有当身份验证服务级别为 RPC_C_AUTHN_NONE 时才能设置此身份验证级别。

默认值 (RPC_C_AUTHN_LEVEL_DEFAULT)

COM 通过正常的安全毯式协商来选择身份验证级别。 它永远不会选择“无”作为身份验证级别。

连接 (RPC_C_AUTHN_LEVEL_CONNECT)

客户端和服务器之间会进行正常的身份验证握手并建立会话密钥,但该密钥绝不会用于客户端和服务器之间的通信。 握手后的所有通信都不安全。

调用 (RPC_C_AUTHN_LEVEL_CALL)

只有每个调用开头的标头才会签名。 客户端和服务器之间交换的其他数据既不会签名,也不会加密。 大多数 SSP 都不支持此身份验证级别,并会将其提升为“数据包”而不进行提示。

数据包 (RPC_C_AUTHN_LEVEL_PKT)

每个数据包的标头都会签名,但不会加密。 数据包本身不会签名或加密。

数据包完整性 (RPC_C_AUTHN_LEVEL_PKT_INTEGRITY)

每个数据包都会全部签名,但不会加密。 由于所有数据都由发件人签名,因此收件人可以确定所有数据在传输过程中都未被篡改。

数据包隐私 (RPC_C_AUTHN_LEVEL_PKT_PRIVACY)

每个数据包都会签名并加密。 这有助于保护客户端和服务器之间的整个通信。

AuthenticationLevel

LegacyAuthenticationLevel