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

C# System.Net.CredentialCache.DefaultCredentials中的密码是如何加密的?,c#,encryption,credentials,kerberos,ntlm,C#,Encryption,Credentials,Kerberos,Ntlm,如果我使用system.net.credentialcache.defaultcredentials将当前用户凭据传递给Web服务,信息将通过哪种方式传输? 我认为它不会是明文,因此必须对凭据进行加密,但如何加密呢?这取决于服务器在HEAD响应中请求什么 例如,如果我对您的web服务执行HEAD请求,其响应中的一个http头是“WWW-Authenticate:NTLM”,则存储在DefaultCredentials中的凭据将使用NTLM加密,然后与完整的GET/POST/PUT/where一起

如果我使用system.net.credentialcache.defaultcredentials将当前用户凭据传递给Web服务,信息将通过哪种方式传输?
我认为它不会是明文,因此必须对凭据进行加密,但如何加密呢?

这取决于服务器在HEAD响应中请求什么

例如,如果我对您的web服务执行HEAD请求,其响应中的一个http头是“WWW-Authenticate:NTLM”,则存储在DefaultCredentials中的凭据将使用NTLM加密,然后与完整的GET/POST/PUT/where一起发送。要确保发生这种情况,您需要确保您的web服务器配置为请求NTLM身份验证。在IIS中,这是选择“集成windows身份验证”的情况。我对TomCat没有把握,但看起来很中肯

但是,如果您的web服务器对特定资源的回复为“WWW Authenticate:Basic”(这将涉及以明文形式发送凭据,并将其编码(注意:未加密)为base64),则您将收到ArgumentException,因为通过基本身份验证发送帐户凭据被视为安全异常

Web服务器也可以配置为接受多种身份验证方法,但您应该随时准备接受这些方法中最薄弱的一种,因此提供基本身份验证作为“后援”意味着您的一些用户很可能正在以明文形式发送其凭证

浏览器通常会选择可用的最强大的方法,我怀疑(但不确定).net库也会以同样的方式运行

编辑

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

他们的凭证将作为一个大的加密文件到达服务器,除了web服务器之外,任何人都将解密它们,以查看它们包括当前登录用户的用户名、密码和域


DefaultCredentials将发送的凭据取决于请求DefaultCredentails的应用程序类型。如果是在用户帐户下运行的客户端应用程序,则凭据将是该用户的。如果它是一个ASP.NET应用程序,正在与您的web服务通信,它将使用应用程序池正在运行的帐户的凭据。默认情况下,这是
网络\u服务

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

例如,如果我对您的web服务执行HEAD请求,其响应中的一个http头是“WWW-Authenticate:NTLM”,则存储在DefaultCredentials中的凭据将使用NTLM加密,然后与完整的GET/POST/PUT/where一起发送。要确保发生这种情况,您需要确保您的web服务器配置为请求NTLM身份验证。在IIS中,这是选择“集成windows身份验证”的情况。我对TomCat没有把握,但看起来很中肯

但是,如果您的web服务器对特定资源的回复为“WWW Authenticate:Basic”(这将涉及以明文形式发送凭据,并将其编码(注意:未加密)为base64),则您将收到ArgumentException,因为通过基本身份验证发送帐户凭据被视为安全异常

Web服务器也可以配置为接受多种身份验证方法,但您应该随时准备接受这些方法中最薄弱的一种,因此提供基本身份验证作为“后援”意味着您的一些用户很可能正在以明文形式发送其凭证

浏览器通常会选择可用的最强大的方法,我怀疑(但不确定).net库也会以同样的方式运行

编辑

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

他们的凭证将作为一个大的加密文件到达服务器,除了web服务器之外,任何人都将解密它们,以查看它们包括当前登录用户的用户名、密码和域


DefaultCredentials将发送的凭据取决于请求DefaultCredentails的应用程序类型。如果是在用户帐户下运行的客户端应用程序,则凭据将是该用户的。如果它是一个与您的web服务通信的ASP.NET应用程序,它将使用应用程序池运行时所使用的帐户的凭据,默认情况下,这是
NETWORK\u service

Hm,ok。。。目标是使用windows集成身份验证,以便用户不必提供凭据。必须传递用户的登录凭据才能通过Web服务验证,而Web服务(它是Tomcat)必须通过DC。。。以这种方式传递的凭据也将以明文形式传递吗?什么到达了网络服务?嗯,是的,我明白了,我已经更新了我的答案以包含这些信息。嗯,好的。。。目标是使用windows集成身份验证,以便用户不必提供凭据。必须传递用户的登录凭据才能通过Web服务验证,而Web服务(它是Tomcat)必须通过DC。。。以这种方式传递的凭据也将以明文形式传递吗?网络服务收到了什么?嗯,是的,我明白了,我已经更新了我的答案以包含这些信息。