クライアント認証を使用して 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 クラスを提供します。
よろしくお願いします。