我现在一直在寻找,但我找不到答案。 WCF Security Best Practices说尽可能使用Windows身份验证。如果您需要签名,这可以提供不可否认性和数据完整性吗?
(这里最重要的问题是不可否认。我正在使用TLS,但试图确定我是否可以通过Windows Auth使用TLS或MLS提供不可否认性。从理论上讲,TLS提供了逐跳数据完整性。)
答案 0 :(得分:0)
答案 1 :(得分:0)
最佳实践指南建议使用Windows身份验证,因为它是在所有Microsoft计算机中构建的。它不喜欢需要大量基础设施设置的证书。如果您的计算机已加入Active Directory域,则它应该可以正常工作。
Windows身份验证正在使用SPNEGO协商使用哪种身份验证方法 Kerberos 或 NTLM 。只要有可能,客户端和服务器将首先尝试选择 Kerberos 。否则,将使用 NTLM 。
要回答关于邮件是否可以删除的问题, Kerberos 和 NTLM 都可以用于签名和加密消息。作为WCF程序员,它应该对您透明。您需要做的就是将ProtectedLevel设置为EncryptAndSign。如果您不相信我,可以在设置Windows身份验证后查看网络跟踪。您应该看到邮件已加密。
使用Windows身份验证时,WCF将调用SSPI进行身份验证和邮件加密。我不会介绍SSPI的细节。 Here是 NTLM 加密消息的SSPI调用,而here是 Kerberos 加密消息的SSPI调用。你可以在Windbg中设置一个断点来证明这一点。
虽然上述链接中没有明确说明,this link明确指出上述EncryptMessages方法可以提供数据完整性(签名)和隐私(加密)。
回到关于Windows身份验证是否支持non-repudiation
的原始问题,这实际上是一个更大的问题。 数据签名对non-repudiation
是必要的,但还不够。 WCF还提供审计功能来记录操作或事务。这是为了保证用户不能拒绝执行操作或启动事务。因此,为了支持non-repudiation
,您还应将SuppressAuditFailure设置为false,以确保审核始终正常运行。