[Update] - Я придаю также полные файлы конфигурации, для service, и client (за пределами здесь, чтобы не флудить в теме)Сертификат службы WCF и идентификация конечной точки клиентской стороны - почему это не работает?
У меня ситуация в значительной степени идентична той, изложенной в this вопрос, однако мой вопрос несколько иной.
- Я использую NetTcpBinding с безопасностью набором для TransportWithMessageCredential
- Я использую Пароль/Имя пользователя учетных данные резервную копию с помощью ASP.NET провайдера
- Моей службы самодостаточна в ОСАХ Windows Service
- I do имеют в моей конечной точке поведение указанная аутентификация revocationMode = "NoCheck"
Необходимо, чтобы служба предоставляла сертификат для аутентификации клиентам. Это нормально, я просто делаю:
<serviceCertificate findValue="***"
storeLocation="CurrentUser"
storeName="My"
x509FindType="FindByThumbprint"/>
Теперь я немного представлял себе, что теперь клиент будет в конечном итоге,
<identity>
<certificate encodedValue="encoded certificate"/>
</identity>
И это будет иметь возможность проверить полномочия предоставления услуг для без установленного этого сертификата в магазин на клиентской машине.
Я был удивлен to learn, что, хотя я установил служебные учетные данные сертификата, WSDL выставляет
<Identity>
<Dns>Foo</Dns>
</Identity>
Опять же, на службе я могу установить идентичность в CertificateReference и подключить его к тому же сертификат, а затем WSDL будет разоблачить идентичность как X509Certificate, но когда я запускаю клиент, настройка игнорируется, и я в конечном итоге с сообщением об ошибке:
System.ServiceModel.Security.SecurityNegotiationException: X.509 Cer tificate CN = xxx не находится в магазине доверенных людей. Сертификат X.509 CN = xxx здание цепочки не выполнено. В сертификате, который был использован , существует цепочка доверия, которая не может быть подтверждена . Заменить сертификат или изменить сертификатValidationMode. Цепочка сертификата обработана, но завершен в корневом сертификате, которому не доверяет поставщик доверия.
Есть ли способ заставить клиента использовать это значение из конфигурации и работы без необходимости установки сервисного сертификата (или его корня) на компьютере клиента?
[UPDATE] При установке certificateValidationMode никто не сделает исключение уйти, это неприемлемо решение с точки зрения безопасности.
Это заставляет клиента просто признать, что он получает сертификат «некоторые», не вдаваясь в подробности. Это делает возможным весь диапазон людей в средних атаках. Он по-прежнему не будет проверять информацию, отправленную (предполагаемой) службой, на сертификат, сбрасываемый в конфиге.
Это то, что я закончил делать. У меня есть вопрос хотя - почему это не работает из коробки? Если у клиента есть вся необходимая информация и получает какой-либо сертификат от службы, это наиболее естественная вещь, чтобы сделать это для проверки Другие. Почему WCF не делает этого? –
Гипотеза: из соображений безопасности. Используя предлагаемое решение, безопасность процесса импорта WSDL становится еще более важной, поскольку при общении с сервисом не будет выполняться дополнительная проверка сертификата. –
Я только что начал щедрость по моему собственному вопросу, который кажется похожим на то, что вы здесь говорите. Если вы можете более подробно изложить решение, я бы очень признателен за это! http://stackoverflow.com/questions/4579666/wcf-newbie-how-to-install-and-use-a-ssl-certificate –