我通过带有客户端身份验证的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都希望它的签名者和根证书存在于中。如果它们不存在,则在TLS握手期间不发送客户端证书,这将导致身份验证失败。
我认为这是SslStream的行为,是不能改变的。如果是真的,在上面的WCF客户端代码中是否有使用自定义SslStream的方法?例如,OpenSSL.NET提供了一个没有此限制的SslStream类。
提前谢谢你的帮助。
发布于 2013-10-30 21:00:47
是clientCertificate类型的X509Certificate?吗?在我的测试中,创建X509Certificate2类型的证书有助于使用证书,而无需将证书安装到Windows存储中。
https://stackoverflow.com/questions/12705498
复制相似问题