1

SslStream.AuthenticateAsClientに「長い時間」(〜15秒)かかるという問題があります。これは既知の問題であり、このMSDNブログ投稿で説明されています。

それは2つの可能な解決策を与えます

要約すると、この動作は仕様によるものです。オプションは次のとおりです。1)ルートCA証明書をローカルにインストールして、信頼できるルートCA証明書のリストをインターネットにアクセスする必要がないようにします。2)GPOを介したルート証明書の自動更新機能を無効にして、どのような場合でもインターネットにアクセスしないようにします。

オプション2はセキュリティの観点からは優れたアイデアではないと言われているので、オプション1を実行する必要があります。

問題は、ルートCA証明書を取得する方法がわからないことです。一度入手したら、certutilを使用してインストールする方法を理解できるでしょう。

この関数で実行を中断できます

private static bool CertificateValidationCallback(
            object oSender,
            X509Certificate oCertificate,
            X509Chain oChain,
            SslPolicyErrors oSslPolicyErrors)
        {

        }

だから私の質問は次のとおりだと思います:

ルートCA証明書を取得するにはどうすればよいですか?取得するにはどのような情報が必要ですか?この情報はどこで入手できますか?

4

1 に答える 1

0

X509 標準の機関情報アクセス拡張には、ルート CA 証明書の場所情報 (URL) が含まれていますが、これはオプション フィールドです。

https://www.rfc-editor.org/rfc/rfc5280#section-4.2.2.1

var cert = new X509Certificate2(certData);
var authInfoExtnsions = from ext in cert.Extensions.Cast<X509Extension>()
                        where ext.Oid.Value == "1.3.6.1.5.5.7.1.1"
                        select ext;
foreach (var authInfoExtnsion in authInfoExtnsions)
{
    Console.WriteLine(Encoding.UTF8.GetString(authInfoExtnsion.RawData));
}

authInfoExtnsion.RawDataは複雑な ASN.1 構造 (詳細は X509 標準で確認できます) であり、このコードではルート CA 証明書の URL は表示されません。URLを解析して取得する必要があります。前述したように、Authority Information Access はオプションの拡張機能ですが、存在する場合は、ルート Ca 証明書の URL をコンソールで読み取ることができます。

于 2013-01-18T16:56:34.310 に答える