Как сделать двухстороннюю проверку подлинности в IIS 7.5 (SSL)?

1,915 views
Skip to first unread message

Vitaly Terekhov

unread,
Aug 27, 2011, 6:12:40 AM8/27/11
to moscow...@googlegroups.com
Есть задача. Нужно установить на сервер сертификат и "подписать" им сайт, ограничив возможность подключения только по https. Необходимо реализовать проверку сертификатов клиентов, т.е. раздать пользователям сертификаты, без которых сервер должен отклонять подключения. Авторизация через сертификаты не требуется.
Если у кого-то есть реальный опыт, соображения или готовые сценарии по данному поводу - поделитесь.

Vilkov Tim

unread,
Aug 28, 2011, 3:12:30 AM8/28/11
to moscow alt.net
Буду предполагать, что сертификаты у Вас уже есть (т.е. либо центр
сертификации развернут, либо откуда-то вы их получаете).
Открываем оснастку ISS, выбираем нужный узел (компьютер), идем в
"Сертификаты сервера".
Здесь нужно добавить сертификат сервера (сертификат должен иметь
закрытый ключ). Это позволит включить SSL (https).
Далее идем в свойства нужного приложения, выбираем "Параметры SSL" и
там ставим галки "Требовать SSL" и выбираем "Сертификаты клиента"-
>"Требовать".
Первая галка включит протокол SSL для приложения, вторая приведет к
тому, что при подключении клиента ему будет выбрасываться окошко с
выбором сертификата.
Далее, в Application_SessionStart (не уверен насчет названия) можно
получить клиентский сертификат
HttpContext.Request.ClientCertificate.Certificate и уже делать с ним
что хочешь.
В общих чертах как-то так.

Vitaly Terekhov

unread,
Aug 28, 2011, 5:00:06 AM8/28/11
to moscow...@googlegroups.com
Только вот сервер выдает ошибку 403 о том, что сервер требует сертификат, которого у клиента нет. Возможность выбрать сертификат вручную отсутствует. Тогда я сделал вывод, что сертификат уже должен быть установлен на клиенте в Личные или еще куда-нибудь.
Для сервера я сделал самоподписанный сертификат средствами IIS 7.5, в качестве клиентского пытался использовал его же (что, я убедился, не правильно). Прошу подсказать, как создать правильные сертификаты клиента, сервера и куда их правильно установить. Если есть ссылка не не очень заумную теорию про серверные и клиентские сертификаты, буду благодарен, если поделитесь.

Shelin Anton

unread,
Aug 28, 2011, 5:12:44 AM8/28/11
to moscow...@googlegroups.com
Могу ошибаться но обычно ставят в Trusted Root

2011/8/28 Vitaly Terekhov <va....@gmail.com>

Vitaly Terekhov

unread,
Aug 28, 2011, 9:55:33 AM8/28/11
to moscow...@googlegroups.com
Оба? Клиентский и серверный? Тем не менее мне нужно решить сначала вопрос с генерацией сертификатов.

Vilkov Tim

unread,
Aug 28, 2011, 1:48:52 PM8/28/11
to moscow alt.net
Я тут немного поэксперементировал и боюсь, что самописные сертификаты
(я делал через makecert) в такой конфигурации работать не будут.
Максимум, что у меня получилось - организовать защищенный SSL-канал.
Но когда включаешь "требовать сертификаты клиента" - все перестает
работать.
В то же время с сертификатами, выпущенными нашим тестовым центром
сертификации все работает на ура.
Вот такие дела.
Думаю, стоит попробовать поднять тестовый центр сертификации (гуглить
"Служба сертификации Windows") и выпускать сертификаты через него.

Следует выпустить два сертификата. Сертификат сервера, который
ставится в "Локальный компьютер" (личные) и сертификат клиента,
который ставится в "Текущий пользователь" (Личные). Оба они должны
иметь закрытый ключ.
Далее, настройка сервера на сертификат сервера - как я писал выше.
Единственное, что, я забыл - для работы по SSL нужно настроить
безопасную привязку для сайта.
Делается это так. Выбираем в оснастке IIS сайт (не приложение!),
правой клавишей -> "Изменить привязки". Настраиваем там привязку https
(если нет - добавляем) на наш серверный сертификат.
Ну а дальше заходим по https и должно заработать.

P.S. Если кто сможет заставить работать self-signed сертификаты -
дайте знать как :)

x893

unread,
Aug 28, 2011, 2:04:49 PM8/28/11
to moscow alt.net

Vilkov Tim

unread,
Aug 28, 2011, 2:27:21 PM8/28/11
to moscow alt.net
По-моему, эта фишка нужна, чтобы замапить сертификаты на системных
пользователей, т.е. должны быть Windows-аккаунты, что не всегда гуд.
(во всяком случае, я так понял, почитав
http://www.iis.net/ConfigReference/system.webServer/security/authentication/iisClientCertificateMappingAuthentication)
В приципе, оно работает в той конфигурации, что я написал - просто
нужны полноценные сертфикаты.

On 28 авг, 22:04, x893 <x893...@gmail.com> wrote:
> А это не помогает ?http://technet.microsoft.com/en-us/library/cc772272(WS.10).aspx

x893

unread,
Aug 28, 2011, 2:36:47 PM8/28/11
to moscow alt.net
Вот здесь много букв на эту тему
http://ondrej.wordpress.com/2010/01/24/iis-7-and-client-certificates/

Vitaly Terekhov

unread,
Aug 29, 2011, 2:52:18 AM8/29/11
to moscow...@googlegroups.com
Думаю, стоит попробовать поднять тестовый центр сертификации (гуглить "Служба сертификации Windows") и выпускать сертификаты через него.
Спасибо за подсказку. Практичеси с этим закончил, пока не удалось завести web оснастку выдачи сертификатов, время на research на чегодня закончилось :( Все равно этот сервис я так или иначе запущу.

Хочу уточнить кое-что заранее:
1) мне нужно получить сертификат ЦС и установить его на веб-сервер в доверенные корневые;
2) нужно получить сертификат сервера, сформировав запрос через помощник IIS 7.5, и установить его в "Локальный компьютер" (личные);
3) нужно получить сертификат клиента и установить его НА СЕРВЕР в "Текущий пользователь" (личные)

А куда НА КЛИЕНТЕ установить клиентсткий сертификат?

Vitaly Terekhov

unread,
Aug 29, 2011, 2:53:57 AM8/29/11
to moscow...@googlegroups.com
Вот таким способом ничего не получилось. Возникли траблы генерации сертификатов с помощью утилиты mycert, что подтвердил и "Vilkov Tim"

воскресенье, 28 августа 2011 г. 22:36:47 UTC+4 пользователь x893 написал:

Vilkov Tim

unread,
Aug 29, 2011, 12:03:04 PM8/29/11
to moscow alt.net
Немного не так.
1. Сертификат CA (ЦС) - ставится
На сервере: Локальный комьютер->Доверенные корневые центры
сертификации
На клиенте: Текущий пользовател->Доверенные корневые центры
сертификации

2. Сертификат сервера
Ставится на сервере в Локальный компьютер->Личные (он имеет закрытый
ключ)

3. Сертификат клиента
Ставится на клиенте в Текущий пользователь->Личные (он также имеет
закрытый ключ)
Обратите внимание, если сертификат выпускается через Web-оснатку, то
это должно делаться с машины пользователя, ну либо нужно помечать ключ
экспортируемым
и потом перетаскивать сертификат вместе с ключом на машину
пользователя в виде pfx-файла.

Общее правило простое: что должно работать на сервере в
неинтерактивном режиме - должно искать сертификаты в хранилище
Локальный компьютер (потому что пользователя просто нет).
Соответственно, если есть пользователь, то его личные сертификаты (с
закрытым ключем) ставятся в хранилище Текущий пользователь (Личные).

Vitaly Terekhov

unread,
Aug 30, 2011, 3:34:32 AM8/30/11
to moscow...@googlegroups.com
Ура! Получилось:
1) Поднял сервер сертификации, развернул веб-оснастку выдачи сертификатов
2) Получил и установил корневой сертификат и сертификат сервера на IIS, влючил "Требовать клиентские сертификаты"
3) С клиентской машины получил и установил корневой сертификат и сертификат клиента. Работает, IE вообще без лишних вопросов, а Chrome предлагает выбрать сертификат.

Уверенно движемся к удовлетворению требованиям ФЗ 152.

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

По завершению опубликую подробную инструкцию. Думаю, всем новый ФЗ не дает спокойно жить.

Vilkov Tim

unread,
Aug 30, 2011, 4:29:43 AM8/30/11
to moscow alt.net

> Остаются нерешенные задачи:
> 1) При отзыве сертификата клиента сервер все равно его принимает.
> Нашел, что нужно в оснастке сервера сертификации опубликовать список
> отозванных сертификатов, затем заново выполнить загрузку списка оттозванных
> сертификатов через веб-оснастку. Как бы это автоматизировать?
>
> По завершению опубликую подробную инструкцию. Думаю, всем новый ФЗ не дает
> спокойно жить.

Тут я, детально не подскажу.
У нас у этом плане сделано просто - клиентский сертификат передается в
запросе HttpContext.Request.ClientCertificate.Certificate
и проверяется уже на сервере (см.
System.Cryptography.X509Certificates) - там и на отзыв можно проверить
и по цепочке и т.п.
А вообще, когда открываете файл списка отзыва, там внизу ссылочка есть
"Подробнее о списке отзыва сертификатов". По ней хелп открывается и
там есть пункт "Автоматизация управления сертификатами". Почитайте,
может найдете что-то для Вас подходящее.


Reply all
Reply to author
Forward
0 new messages