Назад | Перейти на главную страницу

Клиентские сертификаты не работают с IIS7

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

Сервер - это Windows Server 2008 Web Edition. Мой локальный клиентский ящик - это Windows 7.

Я подробно описал каждый шаг, который я предпринял для создания этого тестового веб-сайта.

Сначала мне нужно было создать свои тестовые сертификаты. Из командной строки Windows 7 SDK 7.1 на моем локальном компьютере я выполнил следующие команды:

    makecert.exe -r -n "CN=My Personal CA" -pe -sv MyPersonalCA.pvk -a sha1 -len 2048 -cy authority MyPersonalCA.cer

    makecert.exe -iv MyPersonalCA.pvk -ic MyPersonalCA.cer -n "CN=John Doe" -pe -sv JohnDoe.pvk -a sha1 -len 2048 -sky exchange JohnDoe.cer -eku 1.3.6.1.5.5.7.3.2

    pvk2pfx.exe -pvk JohnDoe.pvk -spc JohnDoe.cer -pfx JohnDoe.pfx -po password

После этих команд у меня были следующие файлы:

    MyPersonalCA.cer
    MyPersonalCA.pvk
    JohnDoe.cer
    JohnDoe.pfx
    JohnDoe.pvk

Затем я импортировал в IE на моем локальном компьютере следующее (Инструменты-> Свойства обозревателя-> Контент-> Сертификаты-Импорт): JohnDoe.pfx в «Личное» хранилище (в «Дополнительно» убедитесь, что выбрано «Проверка подлинности клиента» ) MyPersonalCA.cer в магазин "Trusted Root Certification Authrorities"

На сервере я импортировал следующие сертификаты с помощью оснастки MMC Certificates:

    JohnDoe.cer into [Local Computer\Personal] and [Current User\Personal]
    MyPersonalCA.cer into [Local Computer\Trusted Root Certification Authorities] and
    [Current User\Trusted Root Certification Authorities]

Я создал пустое веб-приложение VB.NET (VS2008) и развернул его на сервере. В IIS я назначил это приложение пулу приложений, запущенному от имени администратора, чтобы избежать проблем с разрешениями (да, я исправлю это позже).

В IIS я меняю настройки SSL для приложения следующим образом:

    Check "Require SSL"
    Under "Client Certificates", select "Require"

Я также назначил ошибки 403,7 и 403,5 пользовательским страницам ошибок, чтобы я мог сказать, какую ошибку 403 я получал.

IE должен предложить выбрать сертификат клиента при переходе на страницу. Поскольку в более новых версиях IE не отображается запрос об отсутствии соответствующих сертификатов, я нашел старый ящик с IE6, и в этом поле (с установленными сертификатами) я получаю диалоговое окно «Сертификат клиента», но сертификаты не указаны. IE10 на моем ящике разработчика никогда не открывает подсказку. Я сразу получаю 403,7

Кто-нибудь может сказать мне, где я здесь ошибаюсь? Требуется ли для работы IIS дополнительная настройка?

Задавая этот вопрос, я наткнулся на еще одно сообщение, в котором говорилось о MakeCTL и netssh. Из этого я обнаружил, что если я бегу:

    netssh http show sslcert

Я получаю список настроек, в том числе:

    Negotiate Client Certificate : Disabled

Это нужно включать? Если да, то как мне это включить? Ограниченные инструкции, которые мне удалось найти, звучат так, будто мне нужно удалить привязку SSL и снова добавить ее. Я не решаюсь играть с этим, так как сервер уже используется.

У меня была аналогичная ошибка, когда самозаверяющий сертификат клиента, который я добавил в доверенные корневые центры сертификации для локального компьютера, не принимался. Я решил, применив исправление, описанное здесь: https://support.microsoft.com/en-au/kb/2801679

Короче говоря, если в вашем списке доверенных корневых центров сертификации слишком много сертификатов, то список приемлемых корневых сертификатов, представленный вызывающей стороне, усекается. Если вам не повезло, то нужный корневой сертификат не включен, и система сделает вывод, что у вас нет приемлемых сертификатов. Вы можете диагностировать эту проблему, посмотрев предупреждения в журнале системных событий для вашего IIS-сервера, вызванные «Schannel» с кодом события 36885. Исправление заключается в удалении раздела реестра ... подробнее см. В приведенной выше ссылке MS.