使用证书的相互SSL的WCF auth中出错

时间:2014-10-27 13:18:19

标签: c# web-services wcf ssl ssl-certificate

我正在尝试使用其他公司宣传的服务。关于身份验证和通信的规范是:

  • SOAP
  • 具有相互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.SecurityProtocolType.Ssl3;”
  • 使用netsh在端口中注册公共证书
    • 使用此命令:“netsh http add sslcert ipport = 0.0.0.0:443 certhash = 证书指纹 appid = {应用程序GUID }”
    • 基于我们在另一个项目中遇到的另一个问题

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

1 个答案:

答案 0 :(得分:0)

说我们的基础设施存在一些网络问题。一旦我们从我的机器上取下安全层,服务就会完成。

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