1

我现在一直在寻找一些东西,但我找不到答案。 WCF 安全最佳实践说尽可能使用 Windows 身份验证。如果您需要签名,这能否提供不可否认性和数据完整性?

(这里最重要的问题是不可否认性。我正在使用 TLS,但试图确定我是否可以通过带有 TLS 或 MLS 的 Windows Auth 提供不可否认性。理论上,TLS 提供跳到跳数据完整性。)

4

2 回答 2

0

是的,对于第一个问题。检查这个:

第 4 章:WCF 安全基础知识

Windows 身份验证不提供数据签名。

于 2012-07-03T19:13:08.460 回答
0

最佳实践指南建议使用 Windows 身份验证,因为它内置于所有 Microsoft 机器中。它不喜欢需要大量基础设施设置的证书。如果您的计算机已加入 Active Directory 域,它应该可以正常工作。

Windows 身份验证使用SPNEGO协商使用哪种身份验证方法,KerberosNTLM。只要有可能,客户端和服务器将首先尝试选择Kerberos。否则,将使用NTLM 。

要回答您关于消息是否可以签名的问题,KerberosNTLM都可用于对消息进行签名加密。作为 WCF 程序员,它应该对您透明。您需要做的就是将ProtectedLevel设置为 EncryptAndSign。如果您不相信我,您可以在设置 Windows 身份验证后查看网络跟踪。您应该会看到消息已加密。

使用 Windows 身份验证时,WCF 会调用 SSPI 进行身份验证和消息加密。我不会介绍 SSPI 的细节。 NTLM加密消息SSPI 调用和Kerberos加密消息的 SSPI 调用。您可以在 Windbg 中设置一个断点来证明这一点。

尽管在上述链接中没有明确说明,但该链接明确指出,上述 EncryptMessages 方法可以提供数据完整性(签名)和隐私(加密)。

回到您最初关于是否支持 Windows 身份验证的问题non-repudiation,这实际上是一个更大的问题。 数据签名是必要的,non-repudiation但还不够。WCF 还提供审计功能来记录操作或事务。这是为了保证用户不能拒绝执行操作或发起交易。因此,为了支持non-repudiation,您还应该将SuppressAuditFailure设置为 false 以确保审核始终正常运行。

于 2012-07-07T06:03:37.957 回答