Как я могу заставить сервер Netty перезагрузить сертификат TLS при его обновлении?
У меня есть сервер на базе Netty, который использует файлы сертификатов в кодировке PEM, которые периодически переиздаются (от Let's Encrypt). NETty полностью поддерживает загрузку криптографического материала PEM, но когда сертификат (файл.cer) будет переиздан позже, сервер должен быть перезапущен, чтобы увидеть его.
До сих пор я занимался этим, добавляя пользовательский обработчик инициализации канала, чтобы добавить логику для перезагрузки сертификата и добавления соответствующего SSLHandler, созданного из этого. Но теперь я хочу использовать Aleph, и он ожидает объект Netty SSLContext для TLS.
Это похоже на актуальную и общую проблему с растущей популярностью Let's Encrypt и его относительно недолговечных сертификатов, и я хотел бы решить ее правильно. Это означает Netty-совместимый способ создания SSLContext, который перезагрузит свои сертификаты, если они изменятся на диске.
Некоторые подходы, которые я придумал:
Создайте динамический менеджер доверия / хранилище доверия, затем подключите его к Netty SSLContextBuilder. Можно использовать это как отправную точку https://jcalcote.wordpress.com/2010/06/22/managing-a-dynamic-java-trust-store/, и взять часть кода для загрузки ключа / сертификата из программно Получите KeyStore из PEM (логика Netty PEM -> KeyStore не является общедоступной в классе SSLContext). Сверху: работает и за пределами Нетти. Недостаток: сложен и не использует существующую логику Netty для загрузки ключей PEM и сертификатов.
Добавьте это как вариант с поддержкой Netty.
Может кто-нибудь указать мне на решение или предложить лучший путь для его создания?
0 ответов
Отвечая на мой собственный вопрос.
Ответ: не делайте этого на этом уровне. Вместо этого пусть что-то за пределами стека Netty отслеживает сертификат, а при изменении сертификата удаляет существующий обработчик SSL из конвейера и заменяет его новым с SSLContext, созданным из нового сертификата.