A fatal error occurred when attempting to access the SSL server credential private key. SSL сертификат не работает после перезагрузки


19.03.2012 || Раздел: || Windows || IIS || SSL


Многие начинающие администраторы сталкиваются с проблемой при настройке IIS для работы с HTTPS протоколом. Непосредственно после "успешной" настройки в IIS веб-сайта на работу с протоколом HTTPS (т.е. установлен сертификат в локальное хранилище компьютера и в Bindings  на 443 порту привязан сертификат)  вы обнаруживаете, что после перезагрузки сервера (например, при автоматической установке системных обновлений) сайт перестает открываться (например, IE выдает абсолютно безымянную ошибку "Internet Explorer cannot display the webpage / Internet Explorer не может отобразить эту веб-страницу").

Вы заходите в системные логи и видите следующую ошибку:

"Event ID 36870 - A fatal error occurred when attempting to access the SSL server credential private key. The error code returned from the cryptographic module is 0x8009030d. The internal error state is 10001."

Чаще всего это означает не верную установку Вашего сертификата:

1) либо он без приватного ключа,

2) либо установлен не туда,

3) либо установлен не так, как надо :-)

Чтобы быстро поднять Ваш сайт в работу, можно первоначально сделать такое временное решение (сработает до следующей перезагрузки): в IIS7 в "Bindings" Вашего сайта открыть на редактирование строку с привязкой протокола 443 и, ничего не меняя, пересохранить. Теперь можно подумать о глобальном решении проблемы.

Нам нужно, чтобы сертификат поместился в правильное хранилище компьютера (а не пользователя).
Если у Вас сертификат уже установлен у пользователя, не копируйте его в хранилище компьютера при помощи drag'and'drop, т .к. в процессе копия не доступна процессу IIS после перезагрузки сервера. Загружайте сертификат только через импортирование из файла сертификата.

Мне помогла всего одна команда с использованием утилиты Certutil.exe (http://technet.microsoft.com/ru-ru/library/ee624045(v=WS.10).aspx).

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

certutil.exe -importpfx -p password C:\Temp\SSLcert.pfx

Где,
password - пароль на приватный ключ внутри сертификата
C:\Temp\SSLcert.pfx - путь к файлу сертификата

Эта команда импортирует сертификат в нужные хранилища локальной машины.

После этого снова привяжите сертификат в "Bindings" сайта, запустите сайт, убедитесь, что он работает. Перезагрузите ПК, проверьте, что сайт теперь запускается после перезагрузки.

Для справки приведу еще пару полезных команд:

1) certmgr.exe -add -c RootCA.cer -s -r localMachine Root

Импортирование сертификата корневого центра сертификации

2) certmgr.exe -add -c CA.cer -s -r localMachine CA

Импортирование сертификата выдающего центра сертификации

Список названий хранилищ сертификатов:

  • My - Личные
  • Root - Доверенные корневые центры сертификации
  • Trust - Доверительные отношения в предприятии
  • CA - Промежуточные центры сертификации
  • AuthRoot - Сторонние корневые центры сертификации
  • TrustedPublisher - Довереннные издатели
  • TrustedPeople - Доверенные лица
  • AddressBook - Другие пользователи

См. также -  Настройка сертификата для использования протоколом SSL с помощью команд httpcfg и netsh 

© Сушков С.А. (Соавтор: Ella Sea)

< Предыдущая статья

Быстрое создание сайта на системе KooBoo CMS

Следующая статья >

Правим ошибку EventID 8193: Volume Shadow Copy Service error: Unexpected error calling routine, Access is denied, после установки роли DHCP Server