【问题标题】:Does Windows authentication provide non-repudiation?Windows 身份验证是否提供不可否认性?
【发布时间】:2012-07-03 18:59:11
【问题描述】:

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

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

【问题讨论】:

  • 线索在问题中 - 身份验证与不可否认性和数据完整性(它们也是相互正交的)正交。
  • @syncbean - 如果您需要签名,这就是所有这些的来源。

标签: wcf windows-authentication


【解决方案1】:

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

Chapter 4: WCF Security Fundamentals

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

【讨论】:

  • 我今天早些时候在这个页面上 - 它在哪里说 Windows Auth 提供不可否认性?另外,如果它不签名消息怎么办?
  • 它使用一个令牌,它是机器名、用户和密码的哈希值,这个哈希值被第三方服务器——域控制器信任。如果要防止在传输过程中修改内容,则应该使用 SSL,我不确定在传输过程中修改内容是否会使令牌无效,我认为不会。
  • 我之前在那个页面上,我看不到它在哪里声明这提供了不可否认性。如果消息没有签名,它如何为消息提供不可否认性?
  • 根据this,wsHttpBinding默认使用Windows Auth和MLS,MLS用于对消息进行加密和签名。不过,它并没有说 Windows Auth 会让你签署消息..
【解决方案2】:

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

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

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

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

虽然在上面的链接中没有明确说明,this link 明确指出上面提到的 EncryptMessages 方法可以提供数据完整性(签名)和隐私(加密) .

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

【讨论】:

  • 我们是否对 GSS_Unwrap 调用有足够的可见性以将用户从事务中拉出来?加密必须在 TLS 中处理;我们可能希望在 MLS 中进行签名,以便我们可以在服务级别进行,对吗?
猜你喜欢
  • 2011-02-03
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多