【问题标题】:WCF SSL .pfx BindingWCF SSL .pfx 绑定
【发布时间】: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”。除非您使用完全用途的测试证书,否则服务器和客户端必须各自拥有自己的具有正确用途的证书。

标签: c# rest wcf ssl https


【解决方案1】:

该错误通常表示尚未建立信任关系。为了建立客户端和服务器端之间的关系,我们应该在TRUSTED ROOT CERTIFICATION AUTHORITIES存储中安装彼此的证书。
不推荐使用Http客户端库调用WCF服务,WebHttpbinding(Restful WCF服务)创建的WCF服务除外。我们通常使用客户端代理来调用 WCF soap Web 服务。以下代码可用于在发送 Http 请求时手动验证证书。

ServicePointManager.ServerCertificateValidationCallback += delegate
{
    return true;
};

此外,如果错误仍然存​​在,请发布完整的错误消息。
如果有什么可以帮助的,请随时告诉我。

【讨论】:

    猜你喜欢
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    相关资源
    最近更新 更多