.net WebService, обойти проверку SSL! - PullRequest
5 голосов
/ 06 апреля 2009

Хорошо, я снова работаю с веб-сервисом, у которого есть сертификат, который не на 100% правильно настроен, сертификат настроен для домена * .domain1.com, а API находится по адресу soap.shop.domain1.com/SOAP подключиться к этому веб-сервису, так как я затем получаю исключение WebException "Не удалось установить связь для безопасного канала SSL / TLS. -> Удаленный сертификат недействителен в соответствии с процедурой проверки.

Теперь мой вопрос: есть ли способ обойти эту проверку? Я использую обычную веб-ссылку (2.0), а не сервисную ссылку.

Ответы [ 5 ]

8 голосов
/ 25 мая 2009

Для тех, кто не может определить, с чего начать с этим ответом, это может быть неочевидно. Приведенные выше постеры делают все правильно, но неясно, что делать с данным кодом.

Допустим, у вас где-то есть класс, которому нужно вызвать веб-сервис с сертификатом.

Вот мое законченное решение:

public class MyClass
{

    public  bool TrustAllCertificatesCallback(object sender, X509Certificate cert,
                                                X509Chain chain, SslPolicyErrors errors)
    {
        return true;
    }

    public string CallSomeWebService(string someParam)
    {
        try
        { 
            ServicePointManager.ServerCertificateValidationCallback = TrustAllCertificatesCallback;


            RemoteWebService ws = new RemoteWebService();

            //add the client cert to the web service call.
            ws.ClientCertificates.Add(GetMyCert());

            //call the web service
            string response = ws.SomeMethod(someParam);

            return response.ToString();
        }
        catch (Exception ex)
        {throw;}
    }

    public X509Certificate GetMyCert()
    {
        try
        {
            string certPath = @"C:\MyCerts\MyCert.cer";
            var cert = X509Certificate.CreateFromCertFile(certPath);
            return cert;
        }
        catch (Exception ex)
        {throw;}
    }
}
6 голосов
/ 06 апреля 2009

Да, вы можете использовать следующее, чтобы ASP.NET игнорировал предупреждения сертификатов:

using System;
using System.Net;
using System.Security.Cryptography.X509Certificates;

namespace YourNamespace
    public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy
    {
        public TrustAllCertificatePolicy() {}

        public bool CheckValidationResult(ServicePoint sp, X509Certificate cert,WebRequest req, int problem)
        {
            return true;
        }
    }
}
5 голосов
/ 07 июля 2011

выбери свой вкус ..

лямбда-выражения

            //Trust all certificates
            System.Net.ServicePointManager.ServerCertificateValidationCallback =
                ((sender, certificate, chain, sslPolicyErrors) => true);

            // trust sender (more secure)
            System.Net.ServicePointManager.ServerCertificateValidationCallback
                = ((sender, cert, chain, errors) => cert.Subject.Contains("YourServerName"));

или обычный (лучше для тестирования)

            // validate cert
            // allows for validation of SSL conversations
            ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);

    // callback used to validate the certificate in an SSL conversation
    private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors policyErrors)
    {
        bool result = false;
        if (cert.Subject.ToUpper().Contains("YourServerName"))
        {
            result = true;
        }

        return result;
    }
5 голосов
/ 06 апреля 2009
System.Net.ServicePointManager.ServerCertificateValidationCallback = _
   Function(a, b, c, d) True
3 голосов
/ 06 апреля 2009

Вам нужно обработать событие, которое проверяет сертификат, и просто установить его так, чтобы оно всегда возвращало true. Подробности смотрите в следующем посте:

http://8r13n.wordpress.com/2007/07/24/bypassing-certificate-validation-in-net/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...