Определите, был ли отключен TLS версии, предшествующей 1.2, на RHEL 7.

Вопрос или проблема

Ситуация:
У меня есть виртуальная машина RHEL 7, и я установил на ней ActiveMQ (v5.16.0) (в /opt/…)

В последние несколько дней некоторые из моих клиентов больше не могут подключаться к открытому SSL порту (61617) с использованием, по-видимому, протокола TLS 1.0.

Сообщение об ошибке:

Не удалось принять соединение от tcp://10.10.170.1:45762: Запрашиваемый клиентом протокол TLSv1 не включен или не поддерживается в контексте сервера (Запрашиваемый клиентом протокол TLSv1 не включен или не поддерживается в контексте сервера)

Когда я тестирую порт с самого сервера с помощью команд:

openssl s_client -connect localhost:61617 -tls1
openssl s_client -connect localhost:61617 -tls1_1
openssl s_client -connect localhost:61617 -tls1_2

… первые две команды не показывают SSL сертификат, но третья работает должным образом.

Мой вопрос:

Поскольку мы не изменяли ничего в конфигурации ActiveMQ, меня интересует, были ли установлены какие-либо патчи безопасности на RHEL на уровне ядра?
Где я могу проверить на сервере, имело ли это место?

С стороны ActiveMQ мы не меняли ничего касательно SSL, и наша конфигурация AMQ транспорта никогда не определяла transport.tls:

<transportConnector name="openwire+ssl" uri="ssl://0.0.0.0:61617?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

Обратите внимание, что та же конфигурация ActiveMQ все еще работает на наших производственных серверах, что заставляет меня думать, что что-то было изменено на уровне ОС.

Я не был уверен, куда задавать этот вопрос: unix.SE, serverFault или сюда; не стесняйтесь переместить его, если считаете, что он больше подходит для другого сайта.
Я сосредоточил этот вопрос на RHEL, но это также может быть полезно для других, чтобы знать для других ОС.

Поскольку ActiveMQ является сервисом, к которому подключаются клиенты, именно ActiveMQ явно указывает, какие протоколы могут быть включены для SSL/TLS соединения. Измените файл transport.tls и добавьте следующее содержимое.

<transportConnector name="openwire+ssl" uri="ssl://0.0.0.0:61617?transport.enabledProtocols=TLSv1,TLSv1.1,TLSv1.2&amp;maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

Это также включит все устаревшие протоколы. Имейте в виду, что TLS 1.0 и TLS 1.1 не считаются безопасными и не должны использоваться без осторожности.

Вы можете проверить, был ли отключен конкретный TLS на сервере, используя команду curl, например:

curl -vI --tls-max 1.0 https://example.org/
curl -vI --tls-max 1.1 https://example.org/

Когда TLS отключен, он должен выдать ошибку, такую как:

curl: (35) LibreSSL/3.3.6: ошибка:1404B42E:SSL routines:ST_CONNECT:tlsv1 alert protocol version

Ссылка: Командная строка для проверки версии TLS, требуемой хостом.

Похоже, что недавнее обновление openjdk (с 1.8.282 до 1.8.292 в нашем случае) отключает TLSv1.0 и TLSv1.1 по умолчанию.

Изменение задокументировано в следующем тикете.

Извлечение из тикета гласит:

Отключить TLS 1.0 и 1.1

Решение

Добавить “TLSv1” и “TLSv1.1” в свойство безопасности jdk.tls.disabledAlgorithms в конфигурационном файле java.security.

Вы также можете ознакомиться с примечаниями к версии RedHat

В главе 3.1.4. Отключенные версии TLS 1.0 и 1.1

Версии протокола TLS 1.0 и 1.1, которые больше не считаются безопасными, были заменены более безопасными и современными версиями TLS 1.2 и 1.3.
Версии TLS 1.0 и 1.1 теперь отключены по умолчанию. Если вы столкнетесь с проблемами, вы можете повторно включить версии (на свой страх и риск), удалив TLSv1 или TLSv1.1 из свойства безопасности jdk.tls.disabledAlgorithms в конфигурационном файле java.security.

Это объясняет, почему наш ActiveMQ внезапно перестал работать для клиентов, которые по-прежнему используют устаревшие протоколы. Лучшей практикой было бы мигрировать этих клиентов вместо повторного включения устаревших протоколов.

Забавный момент в том, что сервис (ActiveMQ) все еще работает с предыдущим JDK, пока вы не перезапустите ActiveMQ, поэтому дата применения патча может отличаться от даты, когда у клиента начинают возникать проблемы.

Ответ или решение

Чтобы определить, отключены ли версии TLS до 1.2 на сервере RHEL 7 с установленным ActiveMQ, необходимо выполнить несколько шагов и проверить ряд настроек.

1. Проверка клиентских соединений

Вы уже столкнулись с проблемой, что клиенты не могут подключиться через протокол TLS 1.0, что указывает на его отключение или блокировку. Появившееся сообщение об ошибке:

Could not accept connection from tcp://10.10.170.1:45762: Client requested protocol TLSv1 is not enabled or supported in server context

действительно указывает на то, что ваш сервер больше не поддерживает старая версия протокола TLS. Для проверки версий TLS, которые поддерживает ваш сервер, вы уже использовали команду openssl:

openssl s_client -connect localhost:61617 -tls1    # TLS 1.0
openssl s_client -connect localhost:61617 -tls1_1  # TLS 1.1
openssl s_client -connect localhost:61617 -tls1_2  # TLS 1.2

Как и ожидалось, команды для TLS 1.0 и 1.1 не возвращают сертификат, тогда как запрос для TLS 1.2 работает. Это подтверждает, что версии TLS 1.0 и 1.1 отключены.

2. Изменения в системных пакетах

Поскольку ваша ActiveMQ конфигурация не менялась, стоит проверить, не были ли установлены обновления, которые могли отключить эти версии протокола. На RHEL 7 это может быть связано с обновлениями OpenJDK.

Чтобы проверить, какие обновления были применены, выполните следующую команду:

rpm -qa --last | grep -E 'openjdk|openssl'

Это даст вам список установленных пакетов, связанных с OpenJDK и OpenSSL, а также дату их установки. Обратите внимание на изменения OpenJDK.

3. Конфигурация Java

Если было установлено обновление OpenJDK, с версии 1.8.282 до 1.8.292, то в новой версии TLS 1.0 и 1.1 были отключены по умолчанию из соображений безопасности. Это изменение связано с обновлением настроек безопасности в java.security, где для свойств jdk.tls.disabledAlgorithms добавлены строки, отключающие старые протоколы:

jdk.tls.disabledAlgorithms=SSLv3, RC4, TLSv1, TLSv1.1

Чтобы проверить данную конфигурацию, откройте файл /etc/java-<версия>/security/java.security (путь может варьироваться в зависимости от вашей установки) и проверьте наличие указанных строк. Если вы хотите временно разрешить старые протоколы, вы можете удалить соответствующие записи из этого файла, но это следует делать с большой осторожностью из-за уязвимостей, связанных с использованием устаревших протоколов.

4. Проверка через Curl

Для дополнения можно использовать команду curl, чтобы протестировать доступные версии TLS:

curl -vI --tls-max 1.0 https://localhost:61617/
curl -vI --tls-max 1.1 https://localhost:61617/
curl -vI --tls-max 1.2 https://localhost:61617/

При отключенных протоколах, команды для 1.0 и 1.1 должны возвращать ошибку, указывающую на недоступность протокола.

Рекомендации

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

Заключение

Отключение поддержки TLS 1.0 и 1.1 могло произойти в результате последних обновлений пакетов OpenJDK или в результате изменения конфигураций безопасности. Пожалуйста, следите за версиями используемого программного обеспечения и регулярно проводите аудит своих систем для обеспечения безопасности и соответствия требованиям.

Оцените материал
Добавить комментарий

Капча загружается...