Я использую службу WCF, которая должна принимать только клиентов, которые могут аутентифицировать себя с помощью сертификата клиента ssl. В качестве режима безопасности я использую транспортную безопасность. Требуется, чтобы процесс аутентификации выполнялся PeerTrust. К сожалению, безопасность транспорта не совместима с PeerTrust - это означает, что ChainTrust всегда является предпочтительным методом. В этом случае каждому клиенту доверяют, у которого есть сертификат, подписанный CA, который хранится в моем «Trusted CA Store». Это не то поведение, которое мне нужно.
Я пытался исправить это с помощью специального сертификата-валидатора. Это похоже на работу. Я получаю обратный вызов с сертификатом, и я, вероятно, могу проверить, доверяю ли я сертификату или нет.
Моя проблема в том, что я не уверен в состоянии, когда сертификат предоставляется методу validate в пользовательском валидаторе. SSL обычно проверяет, предоставляя клиенту сертификат, если у клиента есть соответствующий закрытый ключ. Другими словами, моя проблема в том, что я не уверен, что клиент, с которым я разговариваю, - это тот клиент, которым, как мне кажется, он и является.
<serviceBehaviour>
<behavior name="sslbehaviour">
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceThrottling maxConcurrentSessions="2000000000" maxConcurrentCalls="2000000000" maxConcurrentInstances="2000000000"/>
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="Custom" customCertificateValidatorType="Package.MyX509CertificateValidator, server"/>
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
Приветствуются и другие подходы для проверки клиента PeerTrust.
С уважением,
Майкл