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