使用证书进行相互SSL的WCF身份验证时出错

本文关键字:WCF 身份验证 出错 SSL 证书 | 更新日期: 2023-09-27 18:27:54

我正在尝试使用另一家公司发布的服务。有关身份验证和通信的规范为:

  • 肥皂
  • 具有相互SSL身份验证的HTTPS(双向SSL)
    • 使用他们发送给我们的公共证书(我正在用作ServiceCertificate)
    • 使用他们为我们创建的专用证书(我正在用作ClientCertificate)
  • 具有UsernameToken的WS-Security

这是我到目前为止附带的代码:

WSHttpBinding binding = new WSHttpBinding(SecurityMode.Transport);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
binding.SendTimeout = binding.CloseTimeout = binding.ReceiveTimeout = binding.OpenTimeout = new TimeSpan(0, 15, 0); // 15 minutes
Uri uri = new Uri(input.ServiceAddress);
EndpointAddress endpointAddress = new EndpointAddress(uri);
// Client creation
using (Client client = new Client(binding, endpointAddress))
{
    client.ClientCredentials.ClientCertificate.Certificate = input.PrivateCertificate;
    client.ClientCredentials.ServiceCertificate.DefaultCertificate = input.PublicCertificate;
    client.Open();
    // Service call
    ResponseType response = client.ServiceCall(params);
}

当服务被调用时,我收到了这个错误:

服务发出HTTP请求时出错。这可能是因为在HTTPS情况下,服务器证书没有正确配置HTTP.SYS。这也可能是由于客户端和服务器之间的安全绑定不匹配造成的。

我已经尝试过的东西:

  • 添加以下代码行:"System.Net.ServicePointManager.SecurityProtocol=System.Net.SecurityPProtocolType.Ssl3;"
    • 在这个和这个上找到的解决方案
  • 向netsh注册端口中的公共证书
    • 使用此命令:"netsh http add sslcert ipport=0.0.0.0:443 certhash=证书指纹appid={应用程序GUID}"
    • 基于我们在另一个项目中遇到的另一个问题

我不知道如何解决这个问题,而且我对此一无所知!已经搜索了很多,我尝试的一切都没有做到!

使用证书进行相互SSL的WCF身份验证时出错

我们的基础设施存在一些网络问题。一旦我们从我的机器上卸下安全层,服务就会正常工作。

我想证书(可能是密钥)没有通过网络,我收到了错误(因为它没有进行身份验证)。