在WCF客户端中使用自定义SslStream

时间:2012-10-03 09:25:10

标签: c# wcf

我通过https使用客户端身份验证来使用WCF服务。代码如下所示

var webHttpBinding = new WebHttpBinding(WebHttpSecurityMode.Transport);
webHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
var webChannelFactory = new WebChannelFactory<MyService>(webHttpBinding, serviceUri);
webChannelFactory.Credentials.ClientCertificate.Certificate = clientCertificate;
webChannelFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;

var service = webChannelFactory.CreateChannel();

service.SomeMethod();

问题在于,每当我使用某个客户端证书(来自pfx文件)时,.NET SslStream都希望其签名者和根证书需要存在于Windows证书库中。如果它们不存在,则它不会在TLS握手期间发送客户端证书,从而导致身份验证失败。

我认为这是SslStream的行为,无法更改。如果是真的有一种方法在上面的WCF客户端代码中使用自定义SslStream吗?例如,OpenSSL.NET提供了一个没有此限制的SslStream类。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

X509Certificate 类型 clientCertificate ?在我的测试中,创建 X509Certificate2 类型的证书有助于在不将其安装到Windows存储中的情况下使用证书。