Я провожу некоторое тестирование с 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 транспортная безопасность обрабатывается вне области приложения?
Есть ли другой способ заставить проверку сертификата не состояться?