从ASP Net调用https进程

时间:2009-11-25 03:54:01

标签: asp.net authentication https

我有一个ASP NET Web服务器应用程序,它调用在创建pdf文件并返回它的同一个框上运行的另一个进程。第二个过程需要通过SSL进行安全连接。

第二个进程已经发布了带有数字证书的ASP NET应用程序,但我仍然无法进行身份验证,收到403错误。

代码有点难以展示,但这是一种简化的方法......

    X509Certificate cert = X509Certificate.CreateFromCertFile("path\to\cert.cer");
    string URL = "https://urltoservice?params=value";
    HttpWebRequest req = HttpWebRequest.Create(URL) as HttpWebRequest;
    req.ClientCertificates.Add(cert);
    req.Credentials = CredentialCache.DefaultCredentials;
    req.PreAuthenticate = true;
    /// error happens here
    WebResponse resp = req.GetResponse();
    Stream input = resp.GetResponseStream();

错误文本是“远程服务器返回错误:(403)禁止。” 欢迎任何指示。

2 个答案:

答案 0 :(得分:2)

最后修复了(在此*&%$ @#&上浪费了6个小时)

我需要将digi证书上的私钥授予对运行调用ASP.NET应用程序的帐户的访问权限。此帐户默认为NETWORK SERVICE,但您可能希望在更受限制的帐户下运行。 使用winhttpcertcfg工具授予访问权限,以下是它为我工作的原因:

winhttpcertcfg -g -s“cert name”-c“LOCAL_MACHINE \ MY”-a“NETWORK SERVICE” 其中“证书名称”是数字证书的CN。 有关详情,请访问http://support.microsoft.com/kb/901183

感谢所有帮忙指出如何使其发挥作用的人:)

答案 1 :(得分:0)

403听起来像授权问题,而不是身份验证问题。它可能是由PDF服务访问的文件和文件夹上的NTFS安全设置引起的。也许它没有权限在输出文件夹中创建PDF文件?

您可以将客户端证书安装到浏览器中,然后通过浏览器访问PDF服务吗?当你这样做时,你还得到403还是有效?

您可以暂时配置PDF服务以允许未加密的HTTP连接吗?这会让问题消失吗?

在Windows资源管理器中,您是否可以授予“网络服务”帐户完全控制与PDF服务站点根目录对应的物理文件夹的权限?同时授予它对其访问的任何其他目录的完全控制权。在你弄清楚事情后,你应该把事情搞定。

或者您可以将应用程序池更改为在其他帐户下运行 - 例如你自己的帐户。

最后:如果您运行的是IIS 7,则可以启用失败的请求跟踪,这可以为您提供有关失败原因的更多信息。