2

SSL 接続用に CA を設定する方法を決定しようとして、.NET Framework 2.0 を使用したアプリケーションでのサポート証明書を読んでいます。

Validating Certificatesの下の記事の中ほどで、MSDN はいくつかのコードを提示します。

static void ValidateCert(X509Certificate2 cert)
{
    X509Chain chain = new X509Chain();

    // check entire chain for revocation 
    chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;

    // check online and offline revocation lists
    chain.ChainPolicy.RevocationMode = X509RevocationMode.Online | 
                                           X509RevocationMode.Offline;

    // timeout for online revocation list 
    chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 0, 30);

    // no exceptions, check all properties
    chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;

    // modify time of verification
    chain.ChainPolicy.VerificationTime = new DateTime(1999, 1, 1);

    chain.Build(cert);
    if (chain.ChainStatus.Length != 0)
        Console.WriteLine(chain.ChainStatus[0].Status);
    }

じゃあ後で:

// override default certificate policy
ServicePointManager.ServerCertificateValidationCallback =
    new RemoteCertificateValidationCallback(VerifyServerCertificate);

本当に明白な何かが欠けているように感じます。たとえば、コールバックは必要ありません。「SSL 接続を確立してください。信頼できる CA は 1 つだけです」と言いたいだけです。しかし、上記のコードではそれがわかりません。

X509ChainaddCA またはルート オブ トラストを追加する方法がないようです。コールバックの前に CA を設定するべきではありませんか? しかし、上記のコードではそれがわかりません。

Java では、使用する特定の CA をロードした後にTrustManager(またはTrustManagerFactory) で実行されます (例については、HTTPS 要求のためにファイルシステムで PEM エンコードされた CA 証明書を直接使用しますか? を参照してください)。

質問: .Net または C# で SSL 接続に使用する CA を設定するにはどうすればよいですか?

4

1 に答える 1