«Обновите свои сертификаты SSL / TLS Amazon RDS до 31 октября 2019 г.»

Я, как и многие люди, получил электронное письмо с просьбой обновить мой экземпляр RDS для использования нового сертификата rds-ca-2019 для SSL-соединений (предыдущий был rds-ca-2015, срок действия которого истекает 5 марта, 2020). Их документация по процессу немного скудна и говорит что-то вроде «Обновите приложения базы данных, чтобы использовать новый сертификат SSL / TLS». и «Импортируйте сертификат в вашу операционную систему». без дополнительных подробностей об изменениях, требуемых на стороне клиента.

Когда я изначально все настраивал, я не устанавливал никаких сертификатов и использовал обычный образ Ubuntu 18.04 EC2. Экземпляр RDS был настроен на использование rds-ca-2015, и когда я подключился к RDS с помощью psql, он сообщил, что правильно использует TLSv1.2. Если я посмотрю на корневые сертификаты, установленные в ОС, то обнаружу 4 сертификата «Amazon Root CA» с номерами от 1 до 4. Срок действия этих сертификатов не истекает до 2038 и 2040 годов.

Итак, мой вопрос состоит из двух частей:

  1. Каким образом это произошло SSL / TLS изначально работает правильно, если я никогда не устанавливал сертификаты RDS и промежуточные сертификаты, предоставленные Amazon ?
  2. Если я изменил экземпляр базы данных RDS на использование rds-ca-2019, и мне кажется "просто работать", что мне еще нужно сделать?
6
задан 22 October 2019 в 15:29
7 ответов

значение по умолчанию sslmode для PostgreSQL prefer , что означает, что это зашифрует соединение с сертификатом, предоставленным сервером, но не проверит его. Если бы я должен был измениться sslmode установка на verify-ca, или verify-full затем я должен был бы установить промежуточные сертификаты в конкретном каталоге, и затем она сделает надлежащую проверку.

, Поскольку я не обеспокоен нападением MITM на свой VPC, я не думаю, что потружусь переключаться на 'проверить' режимы.

5
ответ дан 3 December 2019 в 00:18

Рассматриваемый сертификат RDS промежуточное звено сертификат. Вы могли бы также знать это как сертификат CA. Когда я использую MySQL Workbench, например, я должен указать, что

  1. хочу использовать SSL (TLS)
  2. Использование файл цепочки CA RDS для проверки сертификата

MySQL Workbench

, Как SSL/TLS правильно работал первоначально, если я никогда не устанавливал [сертификат]?

Зависит, как Ваша система настраивается. Сертификаты CA просто обеспечивают , доверял полномочиям для представленного сертификата. Довольно возможно настроить что-то, что примет любой сертификат вообще, не пытаясь проверить его (т.е. Вы используете самоподписанный сертификат). Другая опция уже существует что-то в Вашем хранилище CA, которое слепо доверяет ей. Это менее вероятно, но не невозможно.

при выполнении этого локально (такие как у Вас есть экземпляр EC2 в том же VPC как Ваш экземпляр RDS) Вам даже, возможно, не понадобился бы SSL.

, Если я изменил экземпляр базы данных RDS для использования rds-ca-2019 и это кажется "просто, работа" является там чем-нибудь больше, что я должен сделать?

номер. Это сбивает с толку, но если бы Вы соединяете и не получаете какие-либо ошибки сертификата, я не волновался бы об этом.

4
ответ дан 3 December 2019 в 00:18

Любые новые экземпляры DB RDS, созданные после 1 ноября 2019, используйте новые сертификаты по умолчанию. Если Ваш экземпляр RDS создается перед вышеупомянутой датой необходимо обновить сертификат.

Для изменения Центра сертификации от rds-ca-2015 до rds-ca-2019 для экземпляра DB

  1. Регистрируются к Консоли управления AWS и открывают консоль Amazon RDS в https://console.aws.amazon.com/rds / .
  2. В панели навигации, выберите Databases и затем выберите экземпляр DB, который Вы хотите изменить.
  3. Выбирают, Изменяют. Страница Modify DB Instance появляется. отошлите вложения
  4. В Сети & раздел безопасности, выберите, rds-ca-2019. отсылают вложения.
  5. Выбирают Continue и проверяют сводку модификаций.
  6. Для применения изменений сразу выберите "Apply immediately". Выбор этой опции вызывает отключение электричества.
  7. На странице подтверждения, рассмотрите свои изменения. Если они корректны, выбирают Modify DB Instance для сохранения изменений.
0
ответ дан 3 December 2019 в 00:18

В Ubuntu добавьте ca-cert, как описано здесь: https://askubuntu.com/questions/73287/how-do-i-install-a-root-certificate

wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem
sudo mkdir /usr/local/share/ca-certificates/aws
sudo mv rds-ca-2019-root.pem /usr/local/share/ca-certificates/aws
sudo openssl x509 \ 
    -in /usr/local/share/ca-certificates/aws/rds-ca-2019-root.pem \
    -inform PEM \
    -out /usr/local/share/ca-certificates/aws/rds-ca-2019-root.crt
sudo update-ca-certificates

: sudo update-ca-certificates
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

Adding debian:rds-ca-2019-root.pem
done.
done.

Эта ссылка описывает, как установить местоположение сертификата ssl для приложения django: https://www.digitalocean.com/community/questions/how-to-connect-managed-database-postgres-with-ssl-mode-varify-full-in-django-app

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': '<name>',
    'USER': '<user>',
    'PASSWORD': '<password>',
    'HOST' : '<host>',
    'PORT' : '25060',   
    'OPTIONS':{
        'sslmode':'verify-full',
        'sslrootcert': os.path.join(BASE_DIR, 'ca-certificate.crt')

}

Этот пост в Stackoverflow https://stackoverflow.com/a/58214922/1415254 описывает, как подключиться с использованием параметров командной строки для psql.

psql "host={hostname} sslmode=prefer sslrootcert={ca-cert.pem} \
sslcert={client-cert.pem} sslkey={client-key.pem} port={port} user={user} \
dbname={db}"

Также

psqlrc and ~/.psqlrc

Unless it is passed an -X or -c option, psql attempts to read and execute commands
from the system-wide startup file (psqlrc) and then the user's personal startup
file (~/.psqlrc), after connecting to the database but before accepting normal
commands. These files can be used to set up the client and/or the server to taste,
typically with \set and SET commands.

И подробнее здесь (в самом конце): https://info.crunchydata.com/blog/ssl-certificate-authentication-postgresql-docker-containers

# the first parameter specifies which TLS mode to use to connect
export PGSSLMODE="verify-full"
# the following two parameters point to the client key/certificate
export PGSSLCERT="`pwd`/certs/client.crt"
export PGSSLKEY="`pwd`/keys/client.key"
# this parameter points to the trusted root CA certificate
export PGSSLROOTCERT="`pwd`/certs/ca.crt"

Полный список переменные окружения здесь: https://www.postgresql.org/docs/9.2/libpq-envars.html

5
ответ дан 9 January 2020 в 14:54

Перед обновлением центра сертификации в RDS до rds-ca-2019 без прерывания соединения вы можете обновить сертификат на стороне клиента.

Если у вашего RDS есть rds-ca-2015, вам следует обновить ключ на стороне клиента с помощью этого https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem.

Согласно документу AWS https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html в нем говорится, что файл rds-combined-ca-bundle.pem содержит оба сертификаты промежуточные и корневые.

После того как ваши приложения объединили файл ca, вам следует приступить к обновлению RDS до центра сертификации rds-ca-2019.

Таким образом без простоев вы можете обновить центр сертификации в RDS до rds-ca-2019.

2
ответ дан 10 January 2020 в 05:02

Точно так же, как OP ответил сам, postgres имеет sslmode по умолчанию, установленный на предпочитают , и это выдержка из документа:

I don't care about encryption, but I wish to pay the overhead of encryption if the server supports it.

Итак, по умолчанию драйвер pg не будет проверять сертификаты, если не указано иное; и именно поэтому, отвечая на исходные вопросы OP, вначале он работает "из коробки", а также работает после обновления RDS до rds-ca-2019 .

Одна из переменных среды для подключения к postgres - через DATABASE_URL в форме

postgres://username:password@host/database?sslmode=verify-full&sslrootcert=config/ca/rds-combined-ca-bundle.pem

, и здесь вы можете указать sslmode и sslrootcert , если вы решите проверить промежуточные сертификаты. Содержимое sslrootcert должно быть одним из следующих ...

https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem

HTH

3
ответ дан 2 February 2020 в 07:46

У этого обновления сертификата есть две стороны:

  1. На стороне сервера: любые экземпляры RDS, созданные до 01.11.2019, требуют перезапуска. Это влечет за собой отключение на ~ 5 минут. Это обновит их, чтобы новые сертификаты были на месте.
  2. Если ваши клиенты используют SSL (выключено / предпочитают по умолчанию), вам необходимо обновить сертификаты (промежуточный + цепочка) из AWS везде, где работают ваши клиенты.

Postgres использует «предпочесть» как способ подключения по умолчанию для клиентов, что означает, что они будут пробовать SSL, если он доступен, но отступать, если нет. Таким образом, существующие клиенты с конфигурацией подключения по умолчанию продолжат работу.

3
ответ дан 13 February 2020 в 02:04

Теги

Похожие вопросы