1

我正在通过带有客户端身份验证的 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 类。

在此先感谢您的帮助。

4

1 回答 1

0

您的clientCertificate是X509Certificate类型吗?在我的测试中,创建X509Certificate2类型的证书有助于使用证书,而无需将其安装到 Windows 存储中。

于 2013-10-30T21:00:47.807 回答