Поделиться через


Устранение неполадок, связанных с 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"

Снимок экрана: командная консоль с синтаксисом certutil.

Если связь выполнена успешно, появится следующее окно:

Снимок экрана: консоль команд с сообщением о успешном завершении команды.

В этом примере 906c9825e56a13f1017ea40eca770df4c24cb735 отпечаток сертификата. Чтобы получить отпечаток, выполните следующие действия.

  1. Откройте сертификат.
  2. Выберите вкладку Сведения.
  3. Прокрутите вниз, чтобы найти раздел отпечатка.
  4. Выберите раздел отпечатка и выделите текст под ним.
  5. Нажмите клавиши 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. 

Это событие или ошибка указывает, что возникла проблема с получением закрытого ключа сертификата. Чтобы устранить предупреждение, выполните следующие действия.

  1. Проверьте разрешения в папке MachineKeys . Все закрытые ключи хранятся в папке MachineKeys , поэтому убедитесь, что у вас есть необходимые разрешения.

  2. Если разрешения установлены и если проблема по-прежнему не устранена, может возникнуть проблема с сертификатом. Возможно, это было повреждено. В следующем журнале событий 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. 
    
  3. Проверьте, работает ли веб-сайт с тестируемым сертификатом.

  4. Создайте резервную копию существующего сертификата, а затем замените его самозаверяющий сертификат.

  5. Попробуйте получить доступ к веб-сайту с помощью HTTPS.

    Если он работает, сертификат, используемый ранее, поврежден и его необходимо заменить новым рабочим сертификатом. Иногда проблема может не быть с сертификатом, а с издателем. Во время проверки цепочки сертификатов может появиться ошибка CERT_E_UNTRUSTEDROOT (0x800b0109) , если корневой сертификат ЦС не является доверенным корневым.

  6. Чтобы устранить эту ошибку, добавьте сертификат ЦС в хранилище доверенного корневого ЦС под учетной записью "Мой компьютер" на сервере. Во время проверки цепочки сертификатов также может появиться ошибка -2146762480(0x800b0110).

  7. Чтобы устранить ошибку, выполните следующие действия, чтобы проверить тип использования сертификата:

    1. Откройте сертификат.
    2. Выберите вкладку Сведения.
    3. Выберите "Изменить свойства".
    4. На вкладке "Общие " убедитесь, что выбран параметр "Включить все цели для этого сертификата " и, что самое главное, проверка подлинности сервера должна присутствовать в списке.

    Снимок экрана: часть диалогового окна

Сценарий 3

Первые два сценария помогают проверить целостность сертификата. После подтверждения отсутствия проблем с сертификатом решается масштабируемая проблема. Но что делать, если веб-сайт по-прежнему недоступен по протоколу HTTPS? Проверьте привязки HTTPS веб-сайта и определите, какой порт и IP-адрес прослушивается.

Решение

  1. Выполните следующую команду, чтобы убедиться, что ни один другой процесс не прослушивает SSL-порт, используемый веб-сайтом.

    netstat -ano" or "netstat -anob"
    
  2. Если на этом порту прослушивается другой процесс, проверьте, почему этот процесс использует этот порт.

  3. Попробуйте изменить сочетание IP-портов, чтобы проверить, доступен ли веб-сайт.

Сценарий 4

К настоящему времени вы можете убедиться, что на веб-сайте установлен правильный рабочий сертификат, и для этого веб-сайта нет другого процесса с использованием SSL-порта. Однако при доступе к веб-сайту по протоколу HTTPS по-прежнему может появиться ошибка "Не удается отобразить страницу". Когда клиент подключается и инициирует согласование SSL, HTTP.sys выполняет поиск конфигурации SSL для пары "IP:Port", к которой подключен клиент. Конфигурация SSL HTTP.sys должна содержать хэш сертификата и имя хранилища сертификатов до успешного согласования SSL. Проблема может возникнуть при HTTP.SYS SSL Listenerиспользовании .

Хэш сертификата, зарегистрированный в HTTP.sys , может иметь значение NULL или может содержать недопустимый GUID.

Решение

  1. Выполните следующую команду:

    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}", возникла проблема.

  2. Удалите эту запись, выполнив следующую команду:

    netsh http delete sslcert ipport=<IP Address>:<Port>
    

    Например:

    netsh http delete sslcert ipport=0.0.0.0:443
    
  3. Чтобы определить, указаны ли 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 по умолчанию отключен.

Дополнительная информация