SSL WCF "Не удалось установить доверительные отношения для безопасного канала SSL / TLS с полномочиями" localhost " - PullRequest
7 голосов
/ 16 ноября 2009

У меня есть веб-сервис WCF, который отлично работает с http-адресом, но с тех пор мне нужно было убедиться, что он работает через https.

Поскольку я использую IIS 7, процесс установки и запуска веб-сайта https с помощью этого руководства был довольно простым здесь

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

Затем я решил установить сертификат, потому что сертификат является локальным хостом, сервер и клиент - это один и тот же компьютер - и пусть мастер автоматически определяет местоположение.

Я вернулся к своему коду клиента WCF, это клиент, который вызывает веб-службы, размещенные в IIS (теперь https), и изменил привязку в 2 местах.

  1. Изменен адрес конечной точки на https
  2. Изменен режим безопасности для транспорта

Запустил код и затем получил эту ошибку:

«Не удалось установить доверительные отношения для безопасного канала SSL / TLS с полномочиями« localhost ».»

Наконец, я вернулся в IIS и в настройках SSL, изменил настройку, чтобы принимать клиентские сертификаты, и попытался проверить, проверено или нет, оба раза возникает одна и та же ошибка.

Есть идеи как это исправить?

Обновление Исправлена ​​ошибка 1 - это потому, что сертификат был выдан имя_компьютера, и я использовал localhost в конфигурации.

Теперь, когда это работает, у меня появляется другая проблема:

Конечная точка не прослушивала https://[machine_name]/Downloads.svc, которая могла бы принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. См. InnerException, если имеется, для получения более подробной информации. "

Внутреннее исключение = "Удаленный сервер возвратил ошибку: (404) Не найдено."

Проверьте web.config сайта IIS и изменил привязки DNS к localhost.

Все еще с этим весело, но, по мнению Microsoft, именно поэтому WCF должен быть хорошим, потому что он отделяет транспорт от логики кодирования, но пока я должен сказать, что это действительно сложно.

Обновление

выключил брандмауэр windows, не помогло ...

Вот моя привязка в web.config

<basicHttpBinding>
     <binding name="IncreasedTimeout" 
              closeTimeout="12:00:00" openTimeout="12:00:00"
              receiveTimeout="12:00:00"
              maxReceivedMessageSize="1000000"
              sendTimeout="12:00:00">
       <security>
         <transport></transport>
       </security>
     </binding>
</basicHttpBinding>

1 Ответ

2 голосов
/ 17 ноября 2009

Скорее всего, вам нужно добавить явные базовые адреса для обоих протоколов, чтобы WCF знал, что вы хотите связать оба. Попробуйте добавить это в ваше <service> определение:

<host>
    <baseAddresses>
        <add baseAddress="http://your-hostname-here/" />
        <add baseAddress="https://your-hostname-here/" />
    </baseAddresses>
</host>

Кроме того, убедитесь, что вы получаете доступ к службе через имя WINS / DNS компьютера или вам необходимо добавить явный заголовок узла к экземпляру веб-сайта в IIS.

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