Почему включить SSL (транспортную безопасность) через net.tcp намного сложнее, чем HTTP? - PullRequest
6 голосов
/ 22 июня 2011

Реализация веб-службы, которая использует безопасность транспортного уровня с WCF через HTTP, довольно проста: Включить SSL для моей службы WCF

Реализация веб-службы, которая использует безопасность транспортного уровня с WCF через net.tcp, довольно сложна: WCF с netTcpBinding и защитой транспорта сертификатов

... и решение net.tcp обычно включает что-то подобное на стороне сервера и на стороне клиента:

 <serviceCertificate
       findValue="MyServiceCertificate"
       storeLocation="LocalMachine"
       storeName="My"
       x509FindType="FindBySubjectName" />

В случае HTTP вам даже не нужно упоминать сертификат ни на клиенте, ни на сервере. В случае с NET.TCP вы должны хранить, определять местоположение и указывать сертификат как на клиенте, так и на сервере в большинстве источников, которые я прочитал.

Что делает магия, которая заставляет вас не беспокоиться о сертификатах в режиме HTTP? И почему эта магия недоступна при использовании net.tcp?

Ответы [ 2 ]

6 голосов
/ 22 июня 2011

Потому что при использовании WCF поверх HTTPS;IIS управляет согласованием с сертификатами (так же, как простой SSL).Так как в IIS нет встроенного сервера для TCP, вы должны сделать это самостоятельно.Вы по-прежнему работаете с сертификатами + WCF для HTTPS, но настройка выполняется в IIS.

EDIT :

Для клиентской части у вас все еще есть другой кусокпрограммного обеспечения.При просмотре веб-сайта по протоколу SSL браузер обрабатывает все это за вас.SSL по HTTP имеет стандартный шаблон согласования, потому что он является частью протокола HTTPS.Для TCP это не является частью протокола, поэтому клиент должен сам позаботиться об этом.

0 голосов
/ 12 ноября 2014

Я тоже изо всех сил боролся с этим и теперь, наконец, чувствую себя идиотом. Это хорошо, потому что это означает, что я действительно понимаю кое-что, что я только что взломал.

При реализации вашего сервиса ваша цель - защитить связь с помощью SSL. Вы должны быть в состоянии сгенерировать ваш файл reference.cs также в Visual Studio. Проблема, с которой вы столкнулись, заключается в том, что вы также включили обмен метаданными под привязку SSL. Инструменты генерации кода не позволяют настраивать необходимые разделы конфигурации netTcpBinding для вызовов, выполняемых для получения метаданных, когда они используются для создания файла reference.cs.

Вам следует создать две отдельные конфигурации привязки в netTcpBinding, одну для вашей службы с:

<security mode="TransportWithMessageCredential">
    <message clientCredentialType="Certificate"/>
</security>

конфиг внутри и другой с:

<security mode="None" />

вместо этого. Убедитесь, что все остальные параметры совпадают, и конечная точка для точек обслуживания в ssl bindingConfig, в то время как конечная точка метаданных указывает на привязку без SSL. После этого вы сможете читать метаданные и снова обновлять справочную службу.

Стоит отметить, что для любых выпусков продуктов вы должны удалить привязку метаданных. Это гарантирует, что вы не выставляете ничего, кроме SSL.

...