Возможна ли безопасность транспорта без аутентификации? Я хорошо знаю об этом, но я не могу установить сертификат на стороне клиента. Кажется, я могу установить WSHttpBinding.SecurityMode на Transport, а ClientCredentialType на HttpClientCredentialType.None, но когда я пытаюсь вызвать службу, я получаю это исключение:
Ошибка при выполнении HTTP-запроса к https: // [MyService]. Это может быть связано с тем, что сертификат сервера не настроен должным образом с HTTP.SYS в случае HTTPS. Это также может быть вызвано несоответствием привязки безопасности между клиентом и сервером.
Я не думаю, что это несоответствие привязки безопасности между клиентом и сервером, потому что я использую прокси, созданный svcutil.
Зачем нужен сертификат сервера, если я установил для ClientCredentialType значение None?





То, что вы настроили, похоже, соответствует тому, что вы хотите.
Я думаю, что проблема связана с разницей между сертификатом, необходимым для обеспечения безопасности транспортного уровня (HTTPS), и любым сертификатом, необходимым для аутентификации.
Для обеспечения безопасности транспортного уровня вам необходимо настроить сертификат, который сервер IIS будет использовать для шифрования. Это никоим образом не используется для идентификации сторон в связи WCF, только для защиты связи. (сертификат, используемый для этого транспорта HTTPS, также используется для идентификации сервера, но не связан с удостоверением WCF)
Вот ссылка на Сообщение блога, объясняющая, как настроить сертификат в IIS для этой цели. Не обязательно лучшее, что может предложить Google, просто первое, что я обнаружил, охватывающее все важные моменты. MSDN также должен подробно рассказать об этом.
Сертификат сервера является, используемый для идентификации сервера для клиента. Если общее имя в сертификате не совпадает с URL-адресом, к которому подключается клиент, по умолчанию соединение прерывается.
@JeremyWiebe Ура - я имел в виду вечеринки в контексте общения WCF. Я это проясню.
У вас может быть соединение HTTPS без аутентификации, но у вас не может быть соединения HTTPS без сертификатов, поскольку шифрование HTTPS использует сертификаты.
Есть несколько вещей, которые нужно проверить:
Если вы не можете получить доступ к WSDL или другому ресурсу на сайте через HTTPS, значит, HTTPS не настроен на сервере.
Если вы получаете предупреждение о сертификате, значит, у вас нет сертификата, которому будет доверять клиент. Здесь есть три варианта; один - получить действующий сертификат откуда-то вроде Verisign, которому будет доверять, другой - установить сертификат в доверенной части хранилища пользователя (что вы не можете сделать, как вы упомянули), и последний - отключить отзыв сертификата в конфигурации WCF клиента.
как отключить отзыв сертификата в конфигурации WCF клиента?
Установите для режима отзыва значение Нет.
У меня была ошибка, которую вы описываете, даже несмотря на то, что режим безопасности был установлен на транспорт, а тип учетных данных клиента не был установлен.
Это произошло из-за того, что URL-адреса моих веб-сервисов были созданы создателем ссылки на сервисы Visual Studio 2010 как http://www.myservice.com:80/myservice.asmx с определенным портом 80. Когда я изменил его на http://www.myservice.com/myservice.asmx, привязка работала правильно.
В дополнение к моему ответу ниже есть и другие препятствия, если вы надеетесь полагаться на что-то вроде ISA-сервера для выполнения шифрования HTTPS, а не на сервер IIS, на котором размещен ваш веб-сервис. Если это ваше требование, возможно, лучше задать новый вопрос.