System.Net.CredentialCache.DefaultCredentials中的密码如何加密?

时间:2009-06-02 10:01:47

标签: c# encryption credentials kerberos ntlm

如果我使用system.net.credentialcache.defaultcredentials将当前用户凭据传递给Web服务,那么信息将以何种方式传输? 我不认为它是明文,所以凭证必须加密,但它们是怎么回事?

1 个答案:

答案 0 :(得分:1)

这取决于服务器在HEAD响应中请求的内容。

例如,如果我对您的Web服务执行HEAD请求,并且其响应中的一个http标头是“WWW-Authenticate:NTLM”,那么存储在DefaultCredentials中的凭据将使用NTLM加密,然后发送到完整的GET / POST / PUT / Whatever。要确保发生这种情况,您需要确保将Web服务器配置为请求NTLM身份验证。在IIS中,这是选择“集成Windows身份验证”的情况。我不确定TomCat,但this post看起来很相关。

但是,如果您的Web服务器对特定资源回复“WWW-Authenticate:Basic”(这将涉及以明文形式发送信用证,编码(注意:加密)为base64) ,您将获得ArgumentException,因为它被视为通过基本身份验证发送您的帐户凭据的安全例外。

Web服务器也可以配置为接受多种身份验证方法,但是您应该始终准备接受最弱的身份验证方法,因此提供基本身份验证作为“后备”意味着您的某些用户可能正在发送他们的凭证以明文形式出现。

浏览器通常会选择可用的最强方法,我怀疑(但不确定).net库的行为方式相同。

修改

只要您的网络服务器为您的网络服务请求NTLM,您就可以确定任何合理的客户端都不会以明文形式发送凭据。使用.net框架中的网络类,您可以确定如果您使用DefaultCredentials,并且不自己手动注入基本身份验证标头,您的凭据将使用NTLM加密发送。

他们的凭据将作为一个大的加密混乱到达服务器,除了Web服务器以外的任何人,他们将解密它们以查看它们包含当前登录用户的用户名,密码和域。

凭证DefaultCredentials将发送取决于请求DefaultCredentails的应用程序类型。如果它是在用户帐户下运行的客户端应用程序,则凭据将是该用户的凭据。如果它是与您的Web服务通信的ASP.NET应用程序,它将使用运行应用程序池的帐户的凭据,默认情况下为NETWORK_SERVICE