[Обновление]. Я также добавляю полные конфигурационные файлы для service, а для клиент (вне этого, чтобы не заливать тему)
У меня ситуация довольно похожа на ситуацию, описанную в этом, однако мой вопрос несколько иной.
- Я использую NetTcpBinding с безопасностью установить в TransportWithMessageCredential
- Я использую пароль/имя пользователя учетные данные, поддерживаемые ASP.NET провайдер
- Мой сервис находится в Windows Сервис
- У меня do есть поведение моей конечной точки заданная проверка revocationMode = "NOCHECK"
Требуется, чтобы служба предоставляла сертификат для аутентификации клиентам. Это нормально, я просто делаю:
<serviceCertificate findValue="***"
storeLocation="CurrentUser"
storeName="My"
x509FindType="FindByThumbprint"/>
Теперь я несколько подумал, что теперь клиент будет иметь
<identity>
<certificate encodedValue="encoded certificate"/>
</identity>
И он сможет проверить учетные данные службы , не установив этот сертификат в хранилище на клиентской машине.
Я был удивлен чтобы узнать, что, хотя я установил учетные данные службы для сертификата, WSDL предоставляет
<Identity>
<Dns>Foo</Dns>
</Identity>
Опять же, при обслуживании я могу установить Identity в CertificateReference и подключить его к одному и тому же сертификату, а затем WSDL будет выставлять личность как X509Certificate, но когда я запускаю клиент, этот параметр игнорируется, и я получаю сообщение об ошибке:
System.ServiceModel.Security.SecurityNegotiationException: Сертификат X.509 CN = xxx отсутствует в доверенные люди хранят. X.509 сертификат CN = xxx строительство цепочки не смогли. Сертификат, который был использован имеет цепочку доверия, которая не может быть проверено. Заменить сертификат или измените сертификатValidationMode. Обработана цепочка сертификатов, но завершено в корневом сертификате, который не доверяет поставщик доверия.
Есть ли способ заставить клиента использовать это значение из конфигурации и работы без необходимости установки сертификата службы (или его корня) на машине клиента?
[ОБНОВЛЕНИЕ] Пока значение параметра certificateValidationMode не будет отменено, исключение будет исключено, это неприемлемое решение с точки зрения безопасности.
Это заставляет клиента просто признать, что он получает сертификат "some", не вдаваясь в подробности. Это делает возможным весь диапазон людей в средних атаках. Он по-прежнему не будет проверять информацию, отправленную (предполагаемой) службой, на сертификат, сбрасываемый в config.