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 つだけです」と言いたいだけです。しかし、上記のコードではそれがわかりません。
X509Chain
add
CA またはルート オブ トラストを追加する方法がないようです。コールバックの前に CA を設定するべきではありませんか? しかし、上記のコードではそれがわかりません。
Java では、使用する特定の CA をロードした後にTrustManager
(またはTrustManagerFactory
) で実行されます (例については、HTTPS 要求のためにファイルシステムで PEM エンコードされた CA 証明書を直接使用しますか? を参照してください)。
質問: .Net または C# で SSL 接続に使用する CA を設定するにはどうすればよいですか?