当我从 aspx 页面发出 http 请求时,IIS 正在剥离我的证书

IIS is stripping my certificate when I make http request from aspx page

我有以下代码来进行自定义网络服务调用。

    var url = "https://webserviceurl"
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(reqString);
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

    X509Certificate Cert = X509Certificate.CreateFromCertFile(Server.MapPath("./Cert/Mycert.cer"));
    // ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(
                                                                    delegate
                                                                    {
                                                                        return true;
                                                                    });
    request.ClientCertificates.Add(Cert);
    request.KeepAlive = false;
    request.ProtocolVersion = HttpVersion.Version10;
    request.ContentType = "text/xml;charset=\"utf-8\"";
    request.Accept = "text/xml";
    request.Method = "POST";

    // add our body to the request
    Stream stream = request.GetRequestStream();
    doc.Save(stream);
    stream.Close();

    var res = new AmericoWebRef.wsdl_UpdateOrderStatusResponseTypeWsdl_UpdateOrderStatusResponseElement();
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        Stream wStr = response.GetResponseStream();
        StreamReader reader = new StreamReader(wStr);
        string s = reader.ReadToEnd();
        wStr.Flush();
        wStr.Close();
    }

如果我从网页 (.aspx) 调用此代码,如果网站是 运行 在我的本地计算机 visual studio 开发服务器中,它工作正常。

当我将此代码部署到 IIS 服务器时失败。 Web 服务服务器在请求中看不到附加的证书。

我尝试了一个示例控制台应用程序并调用了这段代码,它成功了。

我验证了证书位置是正确的,并且证书对网络服务有安全权限read/write,大家。

IIS 会从请求中删除我的证书吗?是否有我可以告诉 IIS 不要这样做的设置,或者是否有不同的方法从网页发出自定义 http 请求。

环境: Windows 2008 R2 IIS 7.5

我也遇到过类似的情况。

案例一: 在我的 IIS 所在的 Web 服务器中,我没有将我的证书安装到证书存储中。我只将证书放在文件夹位置。在这种情况下,无需任何更改即可在 IIS 上按预期工作。

案例二: 另一个网络服务器,我将我的证书安装到证书存储中,并复制到一个文件夹位置。即使我的代码是从文件夹位置附加证书。并且文件夹位置中的证书被授予 "Network service" 的安全权限。它没有用。我必须去我的证书存储和所有任务,管理私钥然后在那里设置安全权限以使其正常工作。

确保您没有在证书存储上安装证书或在您的证书存储上设置权限。无论您是否从那里获得证书。出于某种原因,如果证书指纹匹配并从那里获得许可,IIS 会查看那里。