Рейтинг:0

Обновление / обновление сертификата SSL-сервера Postgres с помощью openssl

флаг ms

Я унаследовал сервер Postgres компании с клиентами SSL. На данный момент около 100 пользователей.

Две проблемы: срок действия моего сертификата CA (root.crt) истекает в следующем году, и, похоже, он все еще TlsV1.0. Так что обновление (обновление) срочно необходимо.

Чего мне следует избегать, так это создания новых клиентских сертификатов для всех пользователей в одном. Для меня это было бы кошмаром :-)

Поэтому я искал решение, при котором старые и новые сертификаты будут работать до тех пор, пока не истечет срок действия всех старых сертификатов. Мне нравились подсказки (также на Serverfault), но пока ничего не сработало.

Что я сделал до сих пор: Я использую старый ключ ca (rootCa.key) и создал новый root.crt), а старый ключ сервера (server.key) создал новый server.crt. Я установил список отзыва (root.crl), root.crt, server.crt и server.key на свой сервер резервного копирования Postgres.

Я могу подключиться с сертификатом newUser.crt, но не со старыми .... как я ожидал.

Я искал в Интернете, как ад, и нашел подсказку, чтобы объединить старые и новые сертификаты на сервере. Поэтому я объединил сертификаты с cat: cat oldRoot.crt >> root.crt и для других файлов. Список отзывов не работал, поэтому я прокомментировал строку: #ssl_crl_file = в Postgres.conf. Кажется, Postgres работает и без списка отзыва.

Результат: В зависимости от того, какой сертификат идет первым в server.crt, я мог бы подключиться со старыми или с новыми сертификатами, но никогда с обоими. Чтобы проверить это, я использовал объединенный root.crt с oldServer.cert, а также с newServer.cert. Оба работали с новыми или старыми.

Это означает, что объединенный root.crt работает нормально, но не объединенный server.crt.

Я проверил это с помощью openssl и объединил root.crt и server.crt: openssl verify -verbose -x509_strict -CAfile root.crt -CApath . old_cert.crt сервер.crt old_cert.crt: ОК сервер.crt: ОК

openssl verify -verbose -x509_strict -CAfile root.crt -CApath . new_cert.crt сервер.crt new_cert.crt: ОК сервер.crt: ОК

Кажется, что openssl может управлять объединенными сертификатами, но не Postgres.

Любая идея, как решить эту проблему?

Любая подсказка приветствуется.

С уважением Шлауки

сервер: Ubuntu 2104, Postgres13 резервный сервер: Ubuntu 1604, Postgres13

Рейтинг:0
флаг ms

Мой краткий ответ на мой вопрос: Yabadabbadooh... это возможно и работает на моей системе резервного копирования!

Это не давало мне спать, поэтому я начал снова с нуля: Сначала я снова проверил старые и новые сертификаты на наличие различий, единственная разница заключалась в другом порядке в теме, но том же содержании.

#1 Поэтому я создал новые root.crt и server.crt со старыми rootCa.key и старыми server.key в одинаковом порядке. Теперь вывод текста был идентичным (тема, Алгоритм подписи....)

#2 Я сделал новый userCert с root.crt.

#3 Я установил сертификаты в Postgres и проверил -> работает.

#4 на этот раз я начал с новых сертификатов сверху.

кошка root_old.crt >> root.crt
кошка server_old.crt >> server.crt
cat server_old.key >> server.key

postgres перезагружаем ...... И теперь старые и новые сертификаты работают!

#5 Проверьте наоборот, скопируйте старые сертификаты поверх объединенных, а затем:

кошка root_new.crt >> root.crt
кошка server_new.crt >> server.crt
кошка server_new.key >> server.key

перезапуск postgres ...... и он больше не работает. Вернитесь к шагу 4, все снова работает хорошо.

#6 Список отзыва: я создал список отзыва для новых сертификатов и установил его в postgres. тогда:

кошка root_old.crl >> root.crl

раскомментировал строку: ssl_crl_file = /root.crl перезапуск постгреса....И все работает нормально.

Я понятия не имею, почему это работает сейчас, я не могу поверить, что это порядок предметов ... думаю, я сделал что-то еще не так в первых попытках. Но я не буду пытаться выяснить, это работает и все :-)

Заключение:

Сделайте root.crt (CA) и server.crt со старыми ключами и максимально идентичными. (проверьте тему и тому подобное)

Объедините сертификаты, список отзыва и ключ так, чтобы старые были в нижней части файла.

Теперь старые сертификаты работают до истечения срока их действия, и вы можете создавать новые сертификаты (с новым ЦС), например, с обновленными Tls.

Некоторая дополнительная информация о версии Tls. Когда я обновил свой сервер до Ubuntu 2104 и Postgres 13, сертификаты не работали. Я нашел подсказку добавить эту строку в /etc/ssl/openssl.conf

Минпротокол = TLSv1.0

Я знаю, что это нехорошо, но помогло на данный момент. Я не смог найти способ проверить, являются ли сертификаты Tlsv1.0 или выше. Единственный тест, если его TlsV1.2 использовал pgsql (13) или pgadmin4, оба не будут работать с TlsV1.0

Итак, в моем файле конфигурации для создания сертификата я использую это:

Минпротокол = TLSv1.2

psql (13) и pgadmin4 теперь работают с новыми сертификатами. Когда срок действия всех старых истечет, я снова изменю /etc/ssl/openssl.conf на это значение.

Обновление до следующей версии Tls потеряло свою актуальность :-)

Ответить или комментировать

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