私はストアを使用するのではなく、プログラムで証明書を使用しようとしています。私はX509Certificate2
のファイル名とパスワードを作成しています。WCF証明書チェーン、プログラムで確認
これは、信頼された人物の証明書ストアにルート証明書を手動で追加したときにうまく動作します。しかし、私はむしろすべての展開でそれを行う必要はありません - 私はむしろそれもプログラムで対処したいと思います。
証明書ストアからルート証明書を削除すると例外が発生します。
私が読んだことはすべて、証明書ストアにルート証明書を手動で追加する必要があると思われます。そうしないと、信頼チェーンが機能しません。
質問:プログラムを使用してトラストチェーンを設定する方法はありますか?手動で行う必要はありません。私はクライアントを使用しようとするとoccures
var serverCert = new X509Certificate2("FullPathToMyCertificate.cer", "Password");
Client.ClientCredentials.ServiceCertificate.DefaultCertificate = serverCert;
例外、次のとおりです:
コードは次のようになります
System.IdentityModel.Tokens.SecurityTokenValidationException
The X.509 certificate CN=notrealcertname, OU=TPA, OU=BMP, OU=Projects, O=Somebody, C=US is not in the trusted people store.
The X.509 certificate CN=notrealcertname, OU=TPA, OU=BMP, OU=Projects, O=Somebody, C=US chain building failed.
The certificate that was used has a trust chain that cannot be verified.
Replace the certificate or change the certificateValidationMode.
A certificate chain could not be built to a trusted root authority.
感謝。それで、** CustomCertificateValidator **を使用しないときに発生するデフォルト動作を模倣するが、ルート証明書を信頼できる人の証明書ストアに手動で追加した** CustomCertificateValidator **を実装したいとします。 ** CustomCertificateValidator **には何を入れますか?おそらく、デフォルトの動作では、Trusted Peopleのルート証明書に対して** serverCert **が評価され、OKが決定され、クライアントは応答を受信します。この評価をするにはどうすればよいですか?もう一度おねがいします、スティーブ。 – Steve
ここでクライアントは何を参照していますか(たとえばClient.ServiceCertificate。)、naespaceしてください。どうもありがとう。 – iTSrAVIE
これは名前空間ではありません。このコードでは、System.ServiceModel.ClientBase <>から派生したクラスに属していることを前提としています。この "ClientBase"は、単に '.ServiceCertificate'、 '.Authentication' then 'を実行できる' ClientCredentials 'プロパティを公開しています。あなたが正確に知る必要がある場合、ServiceCertificateはクラスX509CertificateRecipientClientCredentialです – quetzalcoatl