TrustAllCertificatesCallback игнорируется - PullRequest
4 голосов
/ 22 июля 2010

Учитывая URL или имя сервера, как я могу использовать powershell или .net библиотеку, чтобы загрузить (просроченный) сертификат, используемый веб-сервером, а затем сохранить его в файл или импортировать в мое хранилище сертификатов?

Спасибо!

Я добился прогресса, дошел до этой проблемы:

static class Program
    {
        static void Main()
        {
            ServicePointManager.ServerCertificateValidationCallback = TrustAllCertificatesCallback;
            var tcpclient = new TcpClient("remote.example.com", 443);
            var tcpstream = tcpclient.GetStream();
            var sslstream = new SslStream(tcpstream);
            sslstream.AuthenticateAsClient("remote.example.com");
            X509Certificate rc = sslstream.RemoteCertificate;
            Console.WriteLine(rc.ToString());
            Console.ReadLine();
        }

        public static bool TrustAllCertificatesCallback(
            object sender, X509Certificate cert,
            X509Chain chain, System.Net.Security.SslPolicyErrors errors)
        {
            return true;
        }
    }

Теперь, когда я запускаю эту программу, я получаю исключение AuthenticationException на AuthenticateAsClient в строке и написано «Удаленный сертификат недействителен в соответствии с процедурой проверки».Я запустил его с точкой останова на return true;, и он никогда не вызывал TrustAllCertificatesCallback.Я думаю, что есть проблема с разрешением или конфигурацией сборки, кто-нибудь знает, как это исправить?

1 Ответ

9 голосов
/ 19 октября 2010

Я не сделал ничего подобного, но, глядя на примеры, думаю, я вижу, что не так. Попробуйте этот код:

static class Program
{
    static void Main()
    {
        var tcpclient = new TcpClient("remote.example.com", 443);
        var tcpstream = tcpclient.GetStream();
        var sslstream = new SslStream(tcpstream, false, new RemoteCertificateValidationCallback (TrustAllCertificatesCallback));
        sslstream.AuthenticateAsClient("remote.example.com");
        X509Certificate rc = sslstream.RemoteCertificate;
        Console.WriteLine(rc.ToString());
        Console.ReadLine();
    }

    public static bool TrustAllCertificatesCallback(
        object sender, X509Certificate cert,
        X509Chain chain, System.Net.Security.SslPolicyErrors errors)
    {
        return true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...