Показать сертификат службы в клиенте WCF? - PullRequest
1 голос
/ 19 октября 2010

У меня есть клиент WCF и сервис.Сервис настроен на использование сертификата для шифрования.Это все работает нормально.Мы используем самозаверяющие сертификаты для тестирования.

За исключением того, что один из моих парней из отдела контроля качества удалил сертификат со своего клиентского ПК и все еще может подключиться к службе.Мой вопрос:

В Internet Explorer (и других браузерах), когда вы подключены через HTTPS, вы можете увидеть сертификат сервера, нажав на значок замка.Я хотел бы сделать что-то подобное в моем клиенте WCF, чтобы пользователь мог проверить подлинность сервера.Есть ли в моем клиенте WCF способ получить сертификат сервера и отобразить его?

Ответы [ 2 ]

1 голос
/ 05 августа 2011

Одним из способов достижения этого является использование специального средства проверки сертификатов (в этом случае сертификат сервера будет передан методу Validate, и оттуда вы можете делать с ним все, что вам нравится (т.е. сохранять сертификат где-нибудь на клиенте).можно использовать, а затем проверить его с помощью одного из валидаторов по умолчанию))

public class MyX509CertificateValidator : X509CertificateValidator
{
    private readonly X509CertificateValidationMode _validationMode;
    private readonly WcfClient _client;

    public MyX509CertificateValidator(WcfClient client, X509CertificateValidationMode validationMode)
    {
        _client = client;
        _validationMode = validationMode;
    }

    public override void Validate(X509Certificate2 certificate)
    {
        if (certificate == null)
        {
            throw new ArgumentNullException("certificate");
        }

        _client.ServerCertificate = certificate;

        switch (_validationMode)
        {
            case X509CertificateValidationMode.None:
                None.Validate(certificate);
                return;
            case X509CertificateValidationMode.PeerOrChainTrust:
                PeerOrChainTrust.Validate(certificate);
                return;
            case X509CertificateValidationMode.PeerTrust:
                PeerTrust.Validate(certificate);
                return;
            default:
                ChainTrust.Validate(certificate);
                return;
        }

    }
}
0 голосов
/ 20 октября 2010

При шифровании будет использоваться сертификат на стороне сервера, так же как и для сайта https.

Вы можете использовать клиентские сертификаты для аутентификации, но это нечто другое.

...