我有一个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)禁止。” 欢迎任何指示。
答案 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,则可以启用失败的请求跟踪,这可以为您提供有关失败原因的更多信息。