Вопрос или проблема
Мы используем OpenSSL на сервере CentOS 6 для наблюдения за сертификатом на серверах для RDP.
Для этого мы используем:
openssl s_client -connect SERVER01:3389 -prexit
Это работало безупречно до 4 дней назад, когда вдруг перестало показывать, что используется сертификат, и вместо этого отображает следующее для одного сервера:
CONNECTED(00000003)
140439032170136:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 305 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1539710511
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 305 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1539710511
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
Я видел, что старые версии OpenSSL вызывали эту ошибку, но поскольку версия не изменилась (1.0.1e) и все работало, я не могу понять, что не так.
Я также попытался сбросить RDP-сертификат сервера, но изменений нет.
Похоже, ошибка показывает, что есть сбой TLS рукопожатия, который может иметь несколько причин.
- Так как это работало ранее и внезапно перестало “4 дня назад”, вероятно, что-то изменилось на целевом RDP-сервере (SERVER01).
Ваш вывод из консоли показывает:
- Рукопожатие терпит неудачу на раннем этапе (0 байт прочитано, 305 байт записано)
- Идет согласование TLSv1.2, но шифр не согласовывается (Cipher: 0000)
- Со стороны партнера не предоставляется сертификат
Вы можете сначала попробовать включить отладочный вывод OpenSSL, чтобы увидеть больше деталей о сбое рукопожатия:
openssl s_client -connect SERVER01:3389 -debug -prexit
Может быть, стоит попробовать принудительно применить определенные версии TLS, чтобы изолировать проблемы с протоколом:
openssl s_client -connect SERVER01:3389 -tls1_2 -prexit
openssl s_client -connect SERVER01:3389 -tls1_1 -prexit
Также проверьте поддерживаемые наборы шифров:
openssl s_client -connect SERVER01:3389 -cipher 'HIGH:!aNULL:!eNULL' -prexit
Некоторые возможные причины…
-
Настройки безопасности RDP-сервера могли быть обновлены через:
- Изменения групповой политики
- Обновления Windows
- Ручные изменения конфигурации
-
Магазин сертификатов сервера может иметь проблемы:
- Поврежденный сертификат
- Истекший сертификат
- Отсутствие промежуточных сертификатов
-
Изменения в сети/межсетевом экране:
- Новая политика безопасности
- Инспекция TLS
- Ограничения протоколов
Вы также можете:
- Проверить в Event Viewer Windows на сервере SERVER01 наличие ошибок, связанных с RDP или сертификатами
- Убедиться, что RDP-сертификат правильно установлен в магазине сертификатов удаленного рабочего стола
- Сравнить настройки безопасности RDP с работающим сервером
- Включить журналирование протокола RDP, чтобы увидеть сбой рукопожатия со стороны сервера
Ответ или решение
Управление сертификатами и безопасностью в IT-инфраструктуре — задача немаловажная. Когда дело касается удалённого мониторинга сертификатов для Remote Desktop Protocol (RDP), это становится еще более критично, так как ошибки могут серьёзно повлиять на доступность и безопасность систем. Рассмотрим проблему отсутствия сертификата на одном из серверов — SERVER01 — и постараемся дать исчерпывающее руководство для её решения.
Теория
Основная проблема заключается в невозможности завершения TLS-рукопожатия при попытке подключения к порту 3389 через OpenSSL. Ошибка ssl23_write:ssl handshake failure
свидетельствует о неудачной попытке установления защищенного соединения. Это может быть вызвано целым рядом факторов, от обновления конфигурации на самом сервере до проблем с сетевой инфраструктурой.
Примеры (Почему это может произойти)
-
Изменения на RDP сервере: Поскольку проблема возникла внезапно, с большой вероятностью что-то изменилось на сервере SERVER01. Это могут быть изменения в политике безопасности, вызванные обновлениями Windows или ручной настройкой конфигураций.
-
Неисправный или отсутствующий сертификат: Если сервер не предоставляет сертификат, это может быть вызвано тем, что сертификат истек, был поврежден или неправильно установлен.
-
Шифровальные пакеты (cipher suites): Если сервер и клиент не могут договориться об использовании конкретного пакета шифрования, то соединение не будет установлено. Это может произойти из-за несовместимости обновлений безопасности, устранения устаревших или уязвимых алгоритмов.
-
Сетевые или межсетевые изменения: Изменения в настройках фаервола или сети, такие как инспекция TLS-трафика или изменения в правилах доступа по портам, могут предотвратить успешное подключение.
Применение (Как исправить проблему)
-
Диагностика с помощью OpenSSL:
-
Начните с получения дополнительной информации о рукопожатии, используя команду:
openssl s_client -connect SERVER01:3389 -debug -prexit
Это позволит увидеть более детальный вывод о том, на каком этапе происходит сбой.
-
Протестируйте разные версии TLS, чтобы определить, поддерживаются ли они сервером:
openssl s_client -connect SERVER01:3389 -tls1_2 -prexit openssl s_client -connect SERVER01:3389 -tls1_1 -prexit
-
Поставьте акцент на определенных наборах шифрования:
openssl s_client -connect SERVER01:3389 -cipher 'HIGH:!aNULL:!eNULL' -prexit
-
-
Проверка конфигурации сервера:
- Проверьте Журнал событий Windows на сервере SERVER01 на наличие ошибок, связанных с RDP или сертификатами.
- Убедитесь, что сертификат RDP правильно установлен в соответствующем хранилище сертификатов.
- Сравните настройки безопасности RDP с другим рабочим сервером, чтобы выявить возможные расхождения.
- Включите логирование протоколов RDP на стороне сервера, чтобы отслеживать сбои рукопожатия.
-
Проверка и корректировка сетевых настроек:
- Убедитесь в отсутствии препятствий на уровне сети или фаервола, которые могут блокировать или изменять трафик.
- Проверьте, не происходит ли инспекция TLS-трафика на устройствах безопасности, таких как прокси-серверы. Если она включена, попытайтесь отключить её для проверки.
-
Управление сертификатами:
- Убедитесь в актуальности сертификата. Проверьте на предмет повреждения или истечения срока действия. Если нужно, перепроизведите установку или перевыпустите сертификат.
- Проверьте цепочку сертификатов. Убедитесь, что все промежуточные сертификаты установлены и действительны.
-
Обновление и проверка настройки безопасности:
- Проверьте изменения в групповых политиках и, если нужно, откатите их или настройте снова.
- Убедитесь в том, что все необходимые обновления безопасности были применены корректно, без нарушения конфигурации.
Следуя этим шагам, вы можете диагностировать и устранить проблему отсутствия сертификата на сервере SERVER01. Постоянный мониторинг состояния сертификатов и настроек безопасности поможет предотвратить подобные инциденты в будущем, сохраняя вашу инфраструктуру под надежной защитой.