Можете ли вы заставить клиента доверять сертификату сервера, не требуя, чтобы он был зарегистрированным доверенным сертификатом? - PullRequest
0 голосов
/ 26 января 2010

У меня сервер WCF, развернутый через IIS. Я хочу создать сертификат для этого. Я мог бы сделать это, сделав сервер сервером сертификатов.

Но затем, когда клиент подключается к этому серверу, я хочу, чтобы клиент автоматически доверял сертификату, не регистрируя этот сервер как «доверенный орган».

Возможно ли это?

Все это требует много работы для установки защиты паролем имени пользователя в службе WCF!

Ответы [ 3 ]

2 голосов
/ 31 августа 2011

Вы можете, если добавите это в свой код, но будьте в курсе того, что вы делаете!

System.Net.ServicePointManager.ServerCertificateValidationCallback += ( se, cert, chain, sslerror ) => { return true; };
2 голосов
/ 26 января 2010

Краткий ответ: нет клиенту необходимо добавить корневой сертификат сервера в качестве доверенного пользователя.

Немного более длинный ответ заключается в том, что существует обходной путь для необходимости обеспечения безопасности транспорта в WCF при использовании аутентификации на основе сообщений - этот обходной путь обычно используется, когда вы хотите положиться на другой механизм безопасности, о котором сервер WCF не знает, как сервер ISA, обеспечивающий SSL.

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

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

Редактировать

Извините, если мой ответ вводил в заблуждение. Корневой сертификат сертификата сервера должен находиться в доверенном хранилище клиента. Моей дополнительной деталью было предоставление другого варианта обеспечения безопасности (вы можете использовать ISA-сервер с доверенным сертификатом для подключения SSL)

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

Вот сообщение SO, в котором подробно описано, как это сделать: Как программно установить сертификат в локальное хранилище компьютеров с помощью c #?

1 голос
/ 26 января 2010

Ну, если бы был такой путь, это была бы дыра в безопасности.

Если сертификат не связан с доверенным органом, его легко подделать. Таким образом, ваш выбор - либо связать его тем или иным образом (напрямую или через родительский сертификат, которым вы управляете), либо настроить свой клиент так, чтобы он не требовал сертификата, т. Е. Используя http вместо https.

Имейте в виду, что это оставляет ваших клиентов открытыми для различных атак

Редактировать

Один из возможных сценариев атаки - человек в середине атаки - программа вставляет себя между вашим сервисом и клиентом и направляет информацию через себя. Таким образом, злоумышленник полностью контролирует поток информации.

Он может делать копии паролей или может «корректировать» результаты в обоих направлениях любым удобным для него способом. Единственное, что этому мешает, это сертификаты. Но если они не укоренены, их можно подделать.

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