我从经验中知道,Windows 身份验证在技术上可以使用 IIS 在 Internet 上正常运行 - 这意味着用户面临 401 未授权的挑战,并且大多数浏览器(Chrome、FF、IE、Safari)都会提示输入 Windows 域\用户和密码,并且如果身份验证成功并获得授权,则用户将获得请求的页面。
但后来我读到了这篇文章:
Windows 身份验证不适合在 Internet 环境中使用,因为该环境不需要或加密用户凭据。
HTTPS 可以用于加密,但我正在寻求对另一部分的澄清。
“不需要用户凭证”是什么意思?
基于此,真正的问题是:除了使用 HTTPS 进行加密之外,如何以安全的方式实现 Windows 身份验证以便在 Internet 环境中使用?
微软的说法似乎毫无根据。我知道如果使用 NTLM 而不是 Kerberos,您将失去与受信任的第三方身份提供商的直接连接,但这并不能向我解释为什么如果实施得当,就不需要凭据。正在寻找该方法。谢谢。
答案1
您不应该对面向互联网的网站进行本地身份验证的主要原因是,如果您的网络服务器受到攻击,您的所有本地帐户都会受到攻击。使用 Kerberos,您可以更新密码,并对身份验证进行集中控制。
现在,kerberos 身份验证可以使用 SPN 密钥表,并且您拥有不同类型的加密https://uit.stanford.edu/service/kerberos/keytabs而 NTLM 仅部分使用加密https://blogs.msdn.microsoft.com/chiranth/2013/09/20/ntlm-want-to-know-how-it-works/除非你的操作系统完全支持并更新 NTLMSPP,否则你将以纯文本形式发送凭据http://www.cisco.com/c/en/us/support/docs/security/web-security-appliance/118487-technote-wsa-00.html和https://en.wikipedia.org/wiki/NTLMSSP. NTLM 目前尚未扩展,并且它不是首选协议https://msdn.microsoft.com/en-us/library/windows/desktop/aa378749(v=vs.85).aspx。
如您所见,根据 MS 文档,用户名是纯文本,密码是哈希值。针对 NTLM 的“简单”攻击是可能的 - 传递哈希值,或预测会话中生成的随机数,然后从中获取密码。最重要的是,NTLM 支持 56 和 128 加密,因此它比任何相当新的方法都要低。
对于面向 Web 的服务,没有办法安全地实现本地身份验证。如果可以的话请告诉我。
答案2
most of em don't use https either (even over internet) because they are too cheap to pay for certificates
。
将网站配置为需要 Https 将提供合理的安全措施。如果您正在寻找其他东西,因为他们不想使用/支付证书,那么您就是在浪费大家的时间。在 Internet 上实施 Windows Auth 而不要求 SSL 是不负责任的,因为集成的 Windows 身份验证机制可能由于各种原因而不起作用。当发生这种情况时,他们会被要求输入凭据,如果不需要 SSL,这些凭据将通过网络以纯文本形式传输。
我们甚至还没有考虑数据是否需要加密。
此外,NTLM 和 Kerberos 都会随每个数据包发送 http 授权标头负载,并且该标头包含经过哈希处理/混合的凭据。Kerberos 比 NTLM 更安全,但如果不使用 SSL,两者都可能容易受到 MITM 重放攻击。
根据我的经验,即使在内部网络上,让 Windows Auth 可靠地工作也很困难,当它不起作用时,通过未加密的 http 连接提示输入凭据是一个不容忽视的弱点。它可能无法工作的情况有很多,包括由于组成员身份和/或 IIS 配置设置不足导致令牌/身份验证标头太大,或者客户端和 Active Directory 域之间的 Windows 凭据不同步。令牌大小太大的问题只会发生在 Kerberos 中,因为组成员身份存储在 Kerberos PAC 中。