WCF SSL .pfx 绑定
Posted
技术标签:
【中文标题】WCF SSL .pfx 绑定【英文标题】:WCF SSL .pfx Binding 【发布时间】:2020-05-19 03:33:07 【问题描述】:我的 API 在内部调用另一个安全 API 是我的代码:
string ID = Convert.ToString(ConfigurationManager.AppSettings["ID"]);
string Password = Convert.ToString(ConfigurationManager.AppSettings["Password"]);
string client_ID = Convert.ToString(ConfigurationManager.AppSettings["client_ID"]);
string client_secret = Convert.ToString(ConfigurationManager.AppSettings["client_secret"]);
string patchURI = Convert.ToString(ConfigurationManager.AppSettings["SecureApi"]);
patchURI = patchURI + "?client_ID=" + client_ID + "&client_secret=" + client_secret;
string JsonStringParams = jsonStringRequest();
//ServicePointManager.Expect100Continue = true;
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
byte[] data = Encoding.UTF8.GetBytes(JsonStringParams);
var request = (HttpWebRequest)WebRequest.Create(patchURI);
request.KeepAlive = false;
request.Method = "POST";
request.ContentType = "application/json";
request.ContentType = "application/x-www-form-urlencoded";
request.Headers.Add("UserName", LDAPID);
request.Headers.Add("Password", Password);
string requestData = JsonStringParams;
data = Encoding.UTF8.GetBytes(requestData);
Stream dataStream = request.GetRequestStream();
dataStream.Write(data, 0, data.Length);
dataStream.Close();
var response = request.GetResponse(); // failed at this stage Error : The request was aborted: Could not create SSL/TLS secure channel.",
string result = new StreamReader(response.GetResponseStream()).ReadToEnd();
result = new StreamReader(response.GetResponseStream()).ReadToEnd();
我的 patchURI 包含一个需要 .pfx SSL 的 https 链接,并且客户端已经安装了相同的 .cer/crt 当我使用 patchURI 并在 SOAPUI 工具中传递 SSL 时,我从客户端服务器获得响应,但是当我通过此代码使用时,它失败并生成错误:- 无法创建 SSL 通道。
【问题讨论】:
这是一个危险信号,“已经安装了相同的 .cer/crt”。除非您使用完全用途的测试证书,否则服务器和客户端必须各自拥有自己的具有正确用途的证书。 【参考方案1】:该错误通常表示尚未建立信任关系。为了建立客户端和服务器端之间的关系,我们应该在TRUSTED ROOT CERTIFICATION AUTHORITIES
存储中安装彼此的证书。
不推荐使用Http
客户端库调用WCF服务,WebHttpbinding
(Restful WCF
服务)创建的WCF服务除外。我们通常使用客户端代理来调用 WCF soap Web 服务。以下代码可用于在发送 Http 请求时手动验证证书。
ServicePointManager.ServerCertificateValidationCallback += delegate
return true;
;
此外,如果错误仍然存在,请发布完整的错误消息。 如果有什么可以帮助的,请随时告诉我。
【讨论】:
以上是关于WCF SSL .pfx 绑定的主要内容,如果未能解决你的问题,请参考以下文章