Безопасность транспорта WCF net.tcp - как отключить проверку сертификата сервера на клиенте - PullRequest
2 голосов
/ 27 октября 2011

Я провожу некоторое тестирование с WCF, и в настоящее время у нас есть следующая настройка сервера (упрощенная конфигурация):

<netTcpBinding>
  <binding name="netTcp" ... >
     <security mode="Transport">
        <transport clientCredentialType="None"/>
     </security>
  </binding>
</netTcpBinding>

...

<serviceBehaviors>
    <behavior name="defaultServiceBehavior">
        <serviceCredentials>            
           <serviceCertificate 
                    findValue="OurCert" 
                    storeLocation="LocalMachine" 
                    storeName="My" 
                    x509FindType="FindBySubjectName"/>                      
        </serviceCredentials>
    </behaviour>
</serviceBehaviors>

И следующий клиентский конфиг:

<endpointBehaviors>
    <behavior name="NoRevNoValid">
        <clientCredentials>
            <serviceCertificate>
                <authentication certificateValidationMode="None"
                                revocationMode="NoCheck"/>
            </serviceCertificate>
       </clientCredentials>
    </behavior>
</endpointBehaviors>

Таким образом, идея заключается в том, что сертификат сервера используется для шифрования данных, но при этом Клиент не заботится о проверке сертификата (клиент все равно не будет иметь CA для сертификата).

Однако эта конфигурация не мешает клиенту проверить сертификат. Он все еще пытается пройти по цепочке доверия и искать списки отзыва.

Я нашел эту ссылку о том, что атрибут certificateValidationMode НЕ применяется к привязкам net.tcp .

Я рассмотрел обработку ServicePointManager.ServerCertificateValidationCallback , но опять-таки кажется, что это применимо только к привязкам на основе Http.

Предположительно, оба они связаны с тем, что при использовании привязки net.tcp транспортная безопасность обрабатывается вне области приложения?

Есть ли другой способ заставить проверку сертификата не состояться?

Ответы [ 2 ]

2 голосов
/ 25 ноября 2011

После длительного тестирования выясняется, что ссылка о том, что атрибут certificateValidationMode НЕ применяется к привязкам net.tcp, неверна!

Эта опция по-прежнему применяется к привязкам net.tcp.

Однако сертификат, используемый для безопасности транспорта net.tcp, все еще загружен, и его CA и CRL все еще пытаются разрешиться.Сертификат, который я использовал, содержал URL-адреса как для CRL, так и для CA, поэтому хранилище сертификатов собиралось разрешать их каждый раз (URL-адреса были недоступны), даже несмотря на то, что в конфигурации WCF было сказано игнорировать, является ли сертификат недействительным.

Таким образом, ответ таков: сертификат сертификата WCFValidationMode по-прежнему применяется, просто сертификат будет по-прежнему «разрешен» хранилищем сертификатов.Это не должно быть большой проблемой для большинства людей, но я собираюсь провести дальнейшие тесты относительно URL-адресов, которые есть у сертификата, потому что они вызывают у нас серьезные проблемы с задержкой во время соединения.

0 голосов
/ 18 февраля 2013

В моем случае использование CertificateValidator = X509CertificateValidator.None помогает:

Нерабочий код:

var handler = new Saml2SecurityTokenHandler();
var configuration = new SecurityTokenHandlerConfiguration
    {
        RevocationMode = X509RevocationMode.NoCheck,
        CertificateValidationMode = X509CertificateValidationMode.None
    };
handler.ValidateToken(saml2Token) gives a exception:

Не удалось построить цепочку сертификата X.509 CN = cn.name.com,Используемый сертификат имеет цепочку доверия, которую невозможно проверить.Замените сертификат или измените CertificateValidationMode.Цепочка сертификатов обработана, но завершена корневым сертификатом, которому доверие не доверяет.

рабочий код:

var handler = new Saml2SecurityTokenHandler{CertificateValidator = X509CertificateValidator.None};
var configuration = new SecurityTokenHandlerConfiguration();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...