2

テスト目的で X509 証明書を作成したいと考えています。この証明書は、3 人の開発者がそれぞれのローカル マシンで共有する必要があります (つまり、全員が同じ証明書を共有するため、同じ拇印を使用できます)。

したがって、この証明書の秘密鍵はエクスポート可能でなければなりません。

次のコマンドで証明書を作成します。

makecert -r -pe -n "CN=mytestsite.local" -b 01/01/2000 -e 01/01/2036 -ss my -sr localMachine -sky exchange localhost.cer

この証明書は正常に機能しますが、問題は、Certificates.Find を呼び出すときに isValid 引数を false にする必要があることです...

        var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
        store.Open(OpenFlags.ReadOnly);

        var cert = store.Certificates.Find(
                                X509FindType.FindByThumbprint,
                                Config.PdfCertificateThumbprint, 
                                false  //********************* This has to be false.
                              ).OfType<X509Certificate>().FirstOrDefault();

その IsValid プロパティを True に設定するとすぐに、Find メソッドによって証明書が返されなくなります。makecert が「無効な」証明書を生成するのはなぜですか? または、証明書が無効であると見なされる理由をどのように把握できますか?

4

2 に答える 2

8

それは、インターネットで使用される「本物の」ssl 証明書のような「信頼できる認証局」によって発行されたものではないためです。(例: VeriSign 発行)

ローカルで実行できることは、ユーザーおよび/またはローカル マシンの信頼できる証明書に証明書を手動で追加することです。ただし、この手順は、CA (認証局) によって発行された有効な SSL 証明書を取得するまで、それを使用するすべての人に対して実行する必要があります。

しかし、あなたの質問は、開発目的のみのシナリオを指しているため、手動で証明書を Trusted に追加するか、.Net の証明書検証メカニズムをオーバーライドして、証明書を有効と見なすコードを記述することができます。

于 2013-01-21T11:07:28.540 に答える
0

クライアント構成で使用できる次の設定を試して、証明書の検証プロセスをバイパスすることをお勧めします。

    <serviceCertificate>
      <authentication certificateValidationMode="None"
                      revocationMode="NoCheck" />
    </serviceCertificate>
于 2013-01-21T11:24:02.653 に答える