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