【问题标题】:HttpWebRequest over HTTPS with NTLM not working通过 HTTPS 的 HttpWebRequest 与 NTLM 不工作
【发布时间】:2009-08-12 18:19:30
【问题描述】:

我正在尝试从名为 SV-REQ 的服务器上的 ASP.Net 页面针对另一个名为 SV-RES 的 IIS7 服务器创建一个 HttpWebRequest。当我在 SV-RES 上将 IIS 设置为使用 Digest、Basic 或 Negotiate 并对凭据缓存对象进行更改以使用适当的方法时,代码执行良好,并且我从 SV-RES 获得有效响应,确认用户凭据是正确的。但是,当我将 IIS 设置为在 SV-RES 上使用“Windows 身份验证”时,在凭据缓存对象中使用 NTLM 时会返回 401 错误。

我真的很茫然,如果有人知道如何完成这项工作,我将不胜感激。

注意:正在执行此代码的服务器正在通过 HTTP 进行匿名身份验证。获取请求的服务器是通过 HTTPS 的 NTLM(如前所述),如下面的代码所示。

这是正在执行的 SV-REQ 上的代码。 SV-REQ 是 IIS7 并为 ASP.Net 2.0 配置

Dim credCache As CredentialCache = New CredentialCache()
Dim mUri As Uri = New Uri("https://sv-res.my-domain-here.com/default.htm")
Dim mreq As HttpWebRequest = WebRequest.Create(mUri.ToString)
credCache.Add(mUri, "NTLM", New NetworkCredential(muser, mpass, mdomain))
mreq.Credentials = credCache
Dim mres As HttpWebResponse = mreq.GetResponse

这是我从上述代码中从 SV-RES 返回的错误。 SV-RES 也是为 ASP.Net 2.0 配置的 IIS7

远程服务器返回错误:(401) Unauthorized。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 异常详细信息:System.Net.WebException:远程服务器返回错误:(401)未经授权。 源错误: 第 31 行: credCache.Add(mUri, "NTLM", New NetworkCredential(muser, mpass, mdomain)) 第 32 行:mreq.Credentials = credCache 第 33 行:将 mres 调暗为 HttpWebResponse = mreq.GetResponse 第 34 行:Dim sr As StreamReader = New StreamReader(mres.GetResponseStream()) 第 35 行:txtResult.Text = sr.ReadToEnd() 源文件:C:\inetpub\httproot\contentscan.aspx.vb 行:33 堆栈跟踪: [WebException:远程服务器返回错误:(401)未经授权。] System.Net.HttpWebRequest.GetResponse() +1126 C:\inetpub\httproot\contentscan.aspx.vb:33 中的 contentscan.Page_Load(Object sender, EventArgs e) System.Web.UI.Control.OnLoad(EventArgs e) +132 System.Web.UI.Control.LoadRecursive() +66 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint)+2428

【问题讨论】:

  • 我知道这很明显,但是您是否检查过您发送的凭据实际上是经过授权的用户?

标签: asp.net ssl https httpwebrequest credentials


【解决方案1】:

经过相当多的调查,我在这里发现了问题。看起来它与一个不常被谈论的安全更新有关,因此我在我的网站上写了一篇关于它的帖子:http://www.tinyint.com/index.php/2009/08/24/401-error-on-httpwebrequest-with-ntlm-authentication/

不过,它的简短之处在于 security update 修补了 SMB 中的漏洞,其中一部分涉及在执行身份验证请求时对主机名进行环回检查。如果您启用此环回检查,则必须在注册表中输入您的主机名才能正确进行身份验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-23
    • 2010-12-19
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    相关资源
    最近更新 更多