Вызов WebService из приложения C # с использованием SSL - PullRequest
2 голосов
/ 13 апреля 2011

В моем настольном приложении на C # я вызываю веб-сервисы, разработанные на php. Я могу получить файл CA. Я не знаю, как вызвать веб-сервис через SSL и аутентифицировать сертификат. Что я должен передать серверу и что ожидать в ответе от сервера для аутентификации? Честно говоря, я понятия не имею.

РЕДАКТИРОВАТЬ: По рекомендации: http://weblogs.asp.net/jan/archive/2003/12/04/41154.aspx

// Перед вызовом веб-сервиса System.Net.ServicePointManager.CertificatePolicy = new MyPolicy ();

public class MyPolicy : ICertificatePolicy
{
    X509Certificate clientCert = null;

    public MyPolicy() {
        clientCert = X509Certificate.CreateFromSignedFile(HTTPUtility.CERT_FILE);
    }

    public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem)
    {
        Console.WriteLine("********* Into CheckValidationResult : " + certificate.ToString());

        Console.WriteLine("####### Client Certificate : " + clientCert.ToString() + "\n" + "Subject = " + clientCert.Subject);
        Console.WriteLine("Issuer : " + clientCert.Issuer + "\n Seral No : " + clientCert.GetSerialNumberString());
        Console.WriteLine("Not Before : " + clientCert.GetEffectiveDateString() +" \n Not After : " + clientCert.GetExpirationDateString());
        Console.WriteLine("Thumb Print : " + clientCert.GetPublicKeyString());
        Console.WriteLine("######## EQuals SERVER CERT : " + clientCert.Equals(certificate));

        // Force to return true
        return true;
    }
}

Является ли вышеуказанный метод проверки правильным? Если нет, то почему и каким может быть решение. Я также получаю это предупреждение: «System.Net.ServicePointManager.CertificatePolicy устарел:« CertificatePolicy устарел для этого типа, используйте вместо этого ServerCertificateValidationCallback ».

При этом как я могу узнать, что CheckValidationResult () вернул false?

Любая помощь высоко ценится.

Спасибо

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

Вы пытались использовать ServerCertificateValidationCallback, как рекомендовано в сообщении об устаревании?Например, вы можете добавить метод, подобный следующему, в существующий класс MyPolicy:

public bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    Console.WriteLine(sslPolicyErrors);  // Or whatever you want to do...
    return true;
}

Как только это будет сделано, вы можете заменить существующую строку

System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();

на следующую:

MyPolicy policy = new MyPolicy();
System.Net.ServicePointManager.ServerCertificateValidationCallback = policy.ValidateServerCertificate;
1 голос
/ 13 апреля 2011

Взгляните на это: Как вызвать веб-службу с помощью сертификата клиента для аутентификации в веб-приложении ASP.NET

Вы можете найти 2 примера внизу этой страницы.

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