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 绑定的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure 上的 WCF 中通过 SSL 配置 webHTTP 和 NetHTTP 绑定

WCF 安全绑定问题

如何使用多个绑定将 WCF json 绑定到 https?

springboot配置ssl证书

WCF自寄宿实现Https绑定

iis绑定ssl证书 只提供了crt文件无Key文件怎么办?