Служба собственного размещения WCF с защитой транспорта (проверка подлинности не удалась, поскольку удаленная сторона закрыла транспортный поток). - PullRequest
3 голосов
/ 13 октября 2008

У меня есть собственный сервис, к которому я хочу добавить транспортную безопасность. Я установил для WSHttpBinding.SecurityMode значение Transport, а для параметра ClientCredentialType значение HttpClientCredentialType.None. Я создал сертификат и установил его на свой хост с ServiceHost.Credentials.ServiceCertificate.SetCertificate () Я также зарегистрировал это, используя netsh http add sslcert ipport = 127.0.0.1: 80 certhash = [MyCertHash] certstorename = MY appid = [TheGuidOfTheAppTahtRunsTheService] verifyclientcertrevocation = отключить

Я получаю следующее сообщение об ошибке при попытке вызвать службу: «Аутентификация не удалась, потому что удаленная сторона закрыла транспортный поток.»

Означает ли это, что клиент и сервер пытаются аутентифицировать друг друга? Как я могу отключить это? Чтобы было понятно, я не хочу устанавливать сертификат на клиенте, я не ищу никакой аутентификации, просто защищаю содержимое сообщений, если это вообще возможно.

Ответы [ 3 ]

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

Сертификаты могут быть болью в заднице несколько раз, чтобы получить работу. Первое, что вы всегда должны делать с WCF, это включить трассировку:

http://msdn.microsoft.com/en-us/library/ms733025.aspx

Затем вы можете использовать SVCTraceViewer для просмотра исключений, которые ваш сервис генерирует за кулисами, и получить небольшое представление о том, что происходит, что является обязательным для многих проблем WCF. 9 из 10 раз, трассировка расскажет вам все, что вам нужно знать.

Кроме того, убедитесь, что и на клиенте, и на сервере настроен сертификат, поскольку сертификат должен быть установлен на обеих машинах.

2 голосов
/ 15 февраля 2011

Я пытался отследить эту же ошибку и наткнулся на этот пост. Трассировка WCF не помогает, поскольку ошибка появляется на стороне клиента в стеке HTTP, а на стороне сервера запрос отклоняется до того, как он попадет на уровень WCF.

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

  1. На сервере, выдавшем сертификат, есть действительная и соответствующая выдача. доверенный корневой центр сертификации на том же компьютере.

  2. Имя субъекта сертификата сервера соответствует имени машины точно, и имя компьютера, к которому клиент обращается также («localhost» против значения Environment.MachineName сервера)

  3. отпечаток сертификата сервера был установлен администратором используя следующую команду (используйте netsh эквивалент для более новых версий Windows)

    httpcfg set ssl -i 0.0.0.0:{port} -h {thumbprint}
    
  4. Этот клиент также имеет тот же действующий сертификат выдающего корневого ЦС на клиентском компьютере.

Вот хороший справочник: SSL с автономной службой WCF .

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

MSDN post может помочь решить вашу проблему. Первоначальный запрос в посте - настроить режим безопасности, отличный от вашего, но они переключаются в режим транспорта для устранения неполадок, и эта информация должна относиться к вашей ситуации.

Если то, что вы описываете, - это все, что вы сделали для установки сертификата, то вам не хватает нескольких шагов. Пост описывает процесс получения действующего сертификата. Удачи !!

...