WCFセキュリティとの残酷な戦いの後で、私は今、最終段階にあり、光を見ることができると思います。
サーバーにクライアント証明書がインストールされており、助言されているとおり、証明書ストアのTrusted Peopleフォルダーにあります。
しかし、証明書アプリケーション->サービスを読み取ってみると、次のエラーが発生します。
次の検索条件を使用してX.509証明書を見つけることができません:StoreName 'My'、StoreLocation 'CurrentUser'、FindType 'FindBySubjectName'、FindValue 'Forename Surname'。
「姓名」は私の証明書の「発行先」の一部です。私が見たすべてのチュートリアルでは、これは1つの単語にすぎません。これは問題ですか?証明書をこれらの2つの単語とスペースでCAから受け取りました。
誰かがこれに遭遇したことがありますが、私が露骨に間違っていることはありますか?
更新、証明書はここにあります:
更新:
それはさらに奇妙になります:
WebサーバーにVisual Studioをインストールし、次のコードを使用してThumbprintで証明書を取得しました。
var store = new X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindByThumbprint, "71995159BFF803D25BFB691DEF7AF625D4EE6DFB", false);
これは実際には有効な結果を返します。この情報をサービス/クライアントのweb.configに入れても、エラーが発生します。
私は思います。証明書をTrusted Peopleにインストールし、店舗名myで検索しました
var store = new X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindBySubjectDistinguishedName, certificateSubject, false);
また、2つの検索語FindBySubjectName
またはFindBySubjectDistinguishedName
があります。後者はキーワードとの関連性が高く、最初のキーワードは検索キーワードを使用して何でも検索します。
したがって、基本的には件名を探す必要があります。上記のコードを使用する場合、検索文字列は.. "CN = urs.Microsoft.com、O = DO_NOT_TRUST、OU = Created by http://fiddler2.com "
https://i.stack.imgur.com/QtYvV.png
private X509Certificate2 GetCertificateFromStore()
{
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var certCollection = store.Certificates;
var currentCerts = certCollection.Find(X509FindType.FindBySubjectDistinguishedName, "CN=sf.sandbox.mapshc.com", false);
return currentCerts.Count == 0 ? null : currentCerts[0];
}