Устранение неполадок, связанных с SSL (сертификат сервера)
Применимо к: службы IIS
Обзор
В этой статье показано, как устранять проблемы с протоколом SSL, связанные только с службы IIS (IIS). В ней рассматриваются сертификаты сервера, используемые для проверки подлинности сервера, а не сертификаты клиента.
Если в разделе "Сертификаты клиента" задано значение "Требовать" , и вы столкнулись с проблемами, эта статья не должна ссылаться. Эта статья предназначена только для устранения неполадок с сертификатами SSL-сервера.
Важно знать, что каждый сертификат состоит из открытого ключа (используемого для шифрования) и закрытого ключа (используемого для расшифровки). Закрытый ключ известен только серверу.
Порт по умолчанию для HTTPS — 443. Предполагается, что вы хорошо знаете подтверждение SSL и процесс проверки подлинности сервера во время подтверждения SSL.
Средства, используемые в этом средстве устранения неполадок
Средства, используемые для устранения неполадок различных сценариев:
- Network Monitor 3.4
- Wireshark
Сценарии
При просмотре веб-сайта по протоколу HTTPS отображается следующее сообщение об ошибке:
Первое условие, которое необходимо проверить, является ли веб-сайт доступным по протоколу HTTP. Если это не так, скорее всего, существует отдельная проблема, которая не рассматривается в этой статье. Прежде чем использовать этот средство устранения неполадок, необходимо иметь веб-сайт в http.
Теперь предположим, что веб-сайт доступен по протоколу HTTP, и при попытке просмотреть HTTPS отображается предыдущее сообщение об ошибке. Отображается сообщение об ошибке, так как сбой подтверждения SSL. Существует множество причин, которые подробно описаны в следующих нескольких сценариях.
Сценарий 1
Проверьте, имеет ли сертификат сервера закрытый ключ, соответствующий ему. См. следующий снимок экрана: диалоговое окно "Сертификат"
Решение
Если закрытый ключ отсутствует, необходимо получить сертификат, содержащий закрытый ключ, который, по сути, является . PFX-файл . Ниже приведена команда, которую можно выполнить, чтобы связать закрытый ключ с сертификатом:
C:\>certutil - repairstore my "906c9825e56a13f1017ea40eca770df4c24cb735"
Если связь выполнена успешно, появится следующее окно:
В этом примере 906c9825e56a13f1017ea40eca770df4c24cb735
отпечаток сертификата. Чтобы получить отпечаток, выполните следующие действия.
- Откройте сертификат.
- Выберите вкладку Сведения.
- Прокрутите вниз, чтобы найти раздел отпечатка.
- Выберите раздел отпечатка и выделите текст под ним.
- Нажмите клавиши CTRL A, а затем нажмите клавиши CTRL++C, чтобы выбрать и скопировать ее.
Примечание.
Команда certutil
может не всегда выполняться успешно. Если это не удается, необходимо получить сертификат, содержащий закрытый ключ из центра сертификации (ЦС).
Сценарий 2
В этом сценарии у вас есть сертификат сервера, содержащий закрытый ключ, установленный на веб-сайте. Однако вы продолжаете видеть ошибку, показанную в сценарии 1. Вы по-прежнему не можете получить доступ к веб-сайту по протоколу HTTPS.
Решение
Если у вас есть сертификат, содержащий закрытый ключ, но вы не можете получить доступ к веб-сайту, вы также можете увидеть следующее предупреждение SChannel в журналах системных событий:
Event Type: Error
Event Source: Schannel
Event Category: None
Event ID: 36870
Date: 2/11/2012
Time: 12:44:55 AM
User: N/A
Computer:
Description: A fatal error occurred when attempting to access the SSL server credential private key. The error code returned from the cryptographic module is 0x80090016.
Это событие или ошибка указывает, что возникла проблема с получением закрытого ключа сертификата. Чтобы устранить предупреждение, выполните следующие действия.
Проверьте разрешения в папке MachineKeys . Все закрытые ключи хранятся в папке MachineKeys , поэтому убедитесь, что у вас есть необходимые разрешения.
Если разрешения установлены и если проблема по-прежнему не устранена, может возникнуть проблема с сертификатом. Возможно, это было повреждено. В следующем журнале событий SChannel может появиться код
0x8009001a
ошибки:Event Type: Error Event Source: Schannel Event Category: None Event ID: 36870 Date: 2/11/2012 Time: 12:44:55 AM User: N/A Computer: A fatal error occurred when attempting to access the SSL server credential private key. The error code returned from the cryptographic module is 0x8009001a.
Проверьте, работает ли веб-сайт с тестируемым сертификатом.
Создайте резервную копию существующего сертификата, а затем замените его самозаверяющий сертификат.
Попробуйте получить доступ к веб-сайту с помощью HTTPS.
Если он работает, сертификат, используемый ранее, поврежден и его необходимо заменить новым рабочим сертификатом. Иногда проблема может не быть с сертификатом, а с издателем. Во время проверки цепочки сертификатов может появиться ошибка
CERT_E_UNTRUSTEDROOT (0x800b0109)
, если корневой сертификат ЦС не является доверенным корневым.Чтобы устранить эту ошибку, добавьте сертификат ЦС в хранилище доверенного корневого ЦС под учетной записью "Мой компьютер" на сервере. Во время проверки цепочки сертификатов также может появиться ошибка
-2146762480(0x800b0110)
.Чтобы устранить ошибку, выполните следующие действия, чтобы проверить тип использования сертификата:
- Откройте сертификат.
- Выберите вкладку Сведения.
- Выберите "Изменить свойства".
- На вкладке "Общие " убедитесь, что выбран параметр "Включить все цели для этого сертификата " и, что самое главное, проверка подлинности сервера должна присутствовать в списке.
Сценарий 3
Первые два сценария помогают проверить целостность сертификата. После подтверждения отсутствия проблем с сертификатом решается масштабируемая проблема. Но что делать, если веб-сайт по-прежнему недоступен по протоколу HTTPS? Проверьте привязки HTTPS веб-сайта и определите, какой порт и IP-адрес прослушивается.
Решение
Выполните следующую команду, чтобы убедиться, что ни один другой процесс не прослушивает SSL-порт, используемый веб-сайтом.
netstat -ano" or "netstat -anob"
Если на этом порту прослушивается другой процесс, проверьте, почему этот процесс использует этот порт.
Попробуйте изменить сочетание IP-портов, чтобы проверить, доступен ли веб-сайт.
Сценарий 4
К настоящему времени вы можете убедиться, что на веб-сайте установлен правильный рабочий сертификат, и для этого веб-сайта нет другого процесса с использованием SSL-порта. Однако при доступе к веб-сайту по протоколу HTTPS по-прежнему может появиться ошибка "Не удается отобразить страницу". Когда клиент подключается и инициирует согласование SSL, HTTP.sys выполняет поиск конфигурации SSL для пары "IP:Port", к которой подключен клиент. Конфигурация SSL HTTP.sys должна содержать хэш сертификата и имя хранилища сертификатов до успешного согласования SSL. Проблема может возникнуть при HTTP.SYS SSL Listener
использовании .
Хэш сертификата, зарегистрированный в HTTP.sys , может иметь значение NULL или может содержать недопустимый GUID.
Решение
Выполните следующую команду:
netsh http show ssl
Ниже приведены примеры рабочих и нерабочих сценариев:
Рабочий сценарий
Настройка Параметр IP:port 0.0.0.0:443 Хэш сертификата c09b416d6b 8d615db22 64079d15638e96823d Application ID {4dc3e181-e14b-4a21-b022-59fc669b0914} Имя хранилища сертификатов My Проверка отзыва сертификата клиента Включен Время отзыва 0 Время ожидания извлечения URL-адреса 0 ...... ...... Нерабочий сценарий
Настройка Параметр IP:port 0.0.0.0:443 Хэш сертификата Application ID {00000000-0000-0000-0000-000000000000} CertStoreName My Проверка отзыва сертификата клиента 0 Время отзыва 0 Время ожидания извлечения URL-адреса 0 ...... ...... Хэш-значение, которое видно в рабочем сценарии , — это отпечаток SSL-сертификата. Обратите внимание, что ИДЕНТИФИКАТОР GUID равен нулю в нерабочем сценарии. Возможно, хэш имеет некоторое значение или пусто. Даже если вы удалите сертификат с веб-сайта, а затем запустите
netsh http show ssl
, веб-сайт по-прежнему будет перечислять GUID как все 0s. Если вы видите GUID как "{0000...............000}", возникла проблема.Удалите эту запись, выполнив следующую команду:
netsh http delete sslcert ipport=<IP Address>:<Port>
Например:
netsh http delete sslcert ipport=0.0.0.0:443
Чтобы определить, указаны ли IP-адреса, откройте командную строку и выполните следующую команду:
netsh http show iplisten
Если команда возвращает список IP-адресов, удалите каждый IP-адрес в списке с помощью следующей команды:
netsh http delete iplisten ipaddress=<IP Address>
Примечание.
Перезапустите СЛУЖБЫ IIS после этого с помощью
net stop http /y
команды.
Сценарий 5
Несмотря на все это, если вы по-прежнему не можете просматривать веб-сайт по ПРОТОКОЛУ HTTPS, захватывайте трассировку сети из клиента или сервера. Отфильтруйте трассировку по протоколу SSL или TLS, чтобы просмотреть трафик SSL.
Ниже приведен моментальный снимок трассировки сети для нерабочего сценария:
Ниже приведен моментальный снимок трассировки сети рабочего сценария:
Это метод просмотра трассировки сети. Необходимо развернуть сведения о кадре и узнать, какой протокол и шифр был выбран сервером. Выберите "Server Hello" в описании, чтобы просмотреть эти сведения.
В нерабочем сценарии клиент был настроен только на использование TLS 1.1 и TLS 1.2. Однако веб-сервер IIS был настроен для поддержки до tls 1.0, поэтому подтверждение завершилось сбоем.
Проверьте разделы реестра, чтобы определить, какие протоколы включены или отключены. Вот путь:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
Параметр DWORD с включенным значением должен иметь значение 1. Если задано значение 0, протокол отключен.
Например, ssl 2.0 по умолчанию отключен.