当我从 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 会查看那里。
我有以下代码来进行自定义网络服务调用。
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 会查看那里。