Безопасность транспорта WCF без аутентификации - PullRequest
6 голосов
/ 10 октября 2008

Возможно ли иметь транспортную безопасность без аутентификации? Я хорошо знаю о его недостатках, но я не могу установить сертификат на стороне клиента. Кажется, я могу установить WSHttpBinding.SecurityMode в Transport и ClientCredentialType в HttpClientCredentialType.None, но когда я пытаюсь вызвать службу, я получаю это исключение:

Произошла ошибка при отправке HTTP-запроса на https://[MyService]. Это может быть связано с тем, что сертификат сервера не настроен должным образом с HTTP.SYS в случае HTTPS. Это также может быть вызвано несоответствием привязки безопасности между клиентом и сервером.

Я не думаю, что это несоответствие привязки безопасности между клиентом и сервером, потому что я использую прокси, сгенерированный svcutil.

Почему он ищет сертификат сервера, если я установил для ClientCredentialType значение None?

Ответы [ 3 ]

6 голосов
/ 13 октября 2008

У вас может быть связь HTTPS без аутентификации, но вы не можете иметь связь HTTPS без сертификатов, поскольку шифрование HTTPS использует сертификаты.

Есть несколько вещей, которые нужно проверить:

  1. Можете ли вы получить доступ к WSDL или другому ресурсу на сайте через HTTPS в браузере?
  2. Получаете ли вы какие-либо предупреждения о сертификате при этом?

Если вы не можете получить доступ к WSDL или другому ресурсу на сайте через HTTPS, тогда HTTPS не настроен на сервере.

Если вы получаете предупреждения о сертификате, значит, у вас нет сертификата, которому клиент будет доверять. Здесь есть три варианта; один из них - получить действительный сертификат, например, Verisign , который будет доверенным, другой - установить сертификат в доверенную часть хранилища пользователя (чего нельзя сделать, как вы упомянули), и последнее - отключить определенный отзыв в конфигурации WCF клиента.

1 голос
/ 10 октября 2008

То, что вы настроили, выглядит правильно для того, что вы хотите.

Я думаю, что проблема связана с различием между сертификатом, необходимым для обеспечения безопасности транспортного уровня (HTTPS), и любым сертификатом, необходимым для аутентификации.

Для обеспечения безопасности на транспортном уровне необходимо настроить сертификат для сервера IIS, который будет использоваться для его шифрования. Это никоим образом не используется для идентификации сторон в коммуникации WCF, просто для защиты связи. (сертификат, используемый для этого транспорта HTTPS, также используется для идентификации сервера, но он не связан с удостоверением WCF)

Вот ссылка на сообщение в блоге , объясняющее, как настроить сертификат в IIS для этой цели. Не обязательно лучшее, что может предложить Google, просто первое, что я обнаружил, которое охватило все важные моменты. MSDN также должен подробно об этом рассказать.

0 голосов
/ 22 апреля 2013

У меня была ошибка, которую вы описали, несмотря на то, что для режима безопасности был установлен транспорт, а для типа учетных данных клиента было установлено значение none.

Это было связано с тем, что URL-адреса моих веб-служб были созданы создателем ссылки на службу Visual Studio 2010 как http://www.myservice.com:80/myservice.asmx с определенным портом 80. Когда я изменил это значение на http://www.myservice.com/myservice.asmx переплет работал правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...