Итак, я провел некоторое исследование и обнаружил, что, действительно, WCF не позволяет нам отправлять имя пользователя / пароль в виде открытого текста. Основной аргумент заключается в том, что « небезопасно, поскольку позволяет хакеру перехватывать учетные данные ». Следовательно, требуется безопасный канал, и для этого серверу необходим сертификат X.509.
Хорошо, точка взята. Но вот проблема: указанный сертификат должен быть доверенным на клиенте. Но почему?
Доверенный сертификат обычно используется на серверах, открытых в Интернете, чтобы клиенты могли проверить подлинность сервера (т. Е. Убедиться, что они не подключаются к поддельному серверу). Но что, если идентификация сервера не важна в данном контексте?
Мой продукт состоит из двух приложений. Давайте назовем их клиент и сервер 1 .
Основной сценарий таков:
- Пользователь подключается к сети, в которой установлен один или несколько из этих серверов и открывает клиент приложение
- клиент использует обнаружение WCF для поиска любых серверов в сети
(или, опционально, пользователь может указать адрес сервера вручную)
- Пользователь выбирает, к какому серверу он хочет подключиться, и затем вводит имя пользователя / пароль для этого сервера
- Соединение установлено, клиент делает некоторые звонки на сервер от имени пользователя
Можно видеть, как в этом сценарии пользователю не нужно проверять, что сервер не является поддельным. Даже если бы он захотел, нечего проверять против . В конце концов, единственное, что мы знаем о сервере, это то, что он поддерживает наш протокол, и этот факт не нуждается в проверке.
Другими словами, мне нужна конфиденциальность связи и аутентификация клиента , но не аутентификация сервера .
Было бы достаточно плохо попросить моих клиентов приобрести сертификат у доверенного органа для каждого сервера, но было бы еще хуже, если бы не было возможности объяснить, зачем им это нужно.
Учитывая все вышеперечисленные моменты, я вижу три возможности:
Дизайнеры WCF просто не думали об этом сценарии. То есть WCF его не поддерживает.
(по крайней мере изначально; да, я знаю о творении Ярона Наве ).
Я упускаю некоторые детали, из которых следует, что сертификату все-таки нужно доверять.
Существует способ (неизвестный мне) использовать сертификат только для шифрования, а не для аутентификации сервера, и, таким образом, избегать превращения его в доверенный.
Итак, вопрос:
Какой из этих трех вариантов имеет место? И если это третий, что это за путь? (Мои пальцы скрещены за номер 3: -)
.
,
1 Важно отметить, что термин " server " здесь не используется в смысле "Интернет". Таким образом, сервер - это не компьютер в сети, а программа , которая устанавливается на некотором компьютере, необязательно даже подключенном к Интернету. И многие из них будут установлены разными пользователями на своих сайтах, чаще всего без моего ведома.