it-swarm.com.de

"Aktualisieren Sie Ihre Amazon RDS SSL / TLS-Zertifikate bis zum 31. Oktober 2019"

Wie viele andere Menschen erhielt ich eine E-Mail mit der Aufforderung, meine RDS-Instanz zu aktualisieren, um das neue rds-ca-2019-Zertifikat für SSL-Verbindungen zu verwenden (früher rds-ca-2015, das am 5. März 2020 abläuft). Ihre Dokumentation über den Prozess ist etwas spärlich und sagt Dinge wie "Aktualisieren Sie Ihre Datenbankanwendungen, um das neue SSL/TLS-Zertifikat zu verwenden." und "Importieren Sie das Zertifikat in Ihr Betriebssystem." ohne weitere Details zu Änderungen, die auf der Client-Seite erforderlich sind.

Als ich die Dinge zum ersten Mal einrichtete, habe ich keine Zertifikate installiert und ein Vanilla Ubuntu 18.04 EC2-Image verwendet. Die RDS-Instanz wurde auf rds-ca-2015 eingestellt. Als ich mit psql eine Verbindung zu RDS herstellte, wurde gemeldet, dass TLSv1.2 ordnungsgemäß verwendet wurde. Wenn ich mir die im Betriebssystem installierten Stammzertifikate ansehe, finde ich 4 "Amazon Root CA" -Zertifikate mit den Nummern 1 bis 4. Diese verfallen erst 2038 und 2040.

Meine Frage besteht also aus 2 Teilen:

  1. Wie funktionierte SSL/TLS anfangs ordnungsgemäß, wenn ich die von Amazon bereitgestellten RDS-Zertifikate und Zwischenzertifikate nie installiert hatte?
  2. Wenn ich die RDS-Datenbankinstanz geändert habe, um rds-ca-2019 zu verwenden, und es "einfach zu funktionieren" scheint, muss ich noch etwas tun?
19
Tim Tisdall

Das Standard sslmode für PostgreSQL ist prefer , was bedeutet, dass die Verbindung mit dem vom Server bereitgestellten Zertifikat verschlüsselt, aber nicht überprüft wird. Wenn ich die Einstellung sslmode in verify-ca Oder verify-full Ändern würde, müsste ich die Zwischenzertifikate in einem bestimmten Verzeichnis installieren und dann eine ordnungsgemäße Überprüfung durchführen.

Da ich mir keine Sorgen über einen MITM-Angriff auf meine VPC mache, denke ich nicht, dass ich mich die Mühe machen werde, in den Überprüfungsmodus zu wechseln.

13
Tim Tisdall

Das betreffende RDS-Zertifikat ist ein Zwischenzertifikat . Möglicherweise kennen Sie es auch als CA-Zertifikat. Wenn ich zum Beispiel MySQL Workbench benutze, muss ich das angeben

  1. Ich möchte SSL (TLS) verwenden.
  2. Verwenden Sie die RDS-CA-Kettendatei, um das Zertifikat zu überprüfen

(MySQL Workbench

Wie funktionierte SSL/TLS anfangs ordnungsgemäß, wenn ich das [Zertifikat] nie installiert hatte?

Hängt davon ab, wie Ihr System eingerichtet ist. CA-Zertifikate stellen einfach eine vertrauenswürdige Berechtigung für das präsentierte Zertifikat bereit. Es ist durchaus möglich, etwas einzurichten, das überhaupt ein Zertifikat akzeptiert, ohne zu versuchen, es zu überprüfen (d. H. Sie verwenden ein selbstsigniertes Zertifikat). Eine andere Option ist, dass sich bereits etwas in Ihrem CA-Speicher befindet, das ihm implizit vertraut. Dies ist weniger wahrscheinlich, aber nicht unmöglich.

Wenn Sie dies lokal tun (z. B. wenn Sie eine EC2-Instanz in derselben VPC wie Ihre RDS-Instanz haben), benötigen Sie möglicherweise nicht einmal SSL.

Wenn ich die RDS-Datenbankinstanz geändert habe, um rds-ca-2019 zu verwenden, und es "einfach zu funktionieren" scheint, muss ich noch etwas tun?

Nein, es ist verwirrend, aber wenn Sie eine Verbindung herstellen und keine Zertifikatfehler erhalten, würde ich mir darüber keine Sorgen machen.

7
Machavity

Fügen Sie in Ubuntu das Ca-Zertifikat wie hier beschrieben hinzu: 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.

Dieser Link beschreibt, wie Sie den SSL-Zertifizierungsspeicherort für eine Django - Anwendung: https://www.digitalocean.com/community/questions/how-to-connect-managed-) festlegen. Datenbank-Postgres-mit-SSL-Modus-Variieren-Voll-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')

}}

Dieser Beitrag in Stackoverflow https://stackoverflow.com/a/58214922/1415254 beschreibt, wie eine Verbindung mithilfe von Befehlszeilenparametern für psql hergestellt wird.

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

Ebenfalls

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.

Und mehr Details hier (ganz am Ende): 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"

Vollständige Liste der Umgebungsvariablen hier: https://www.postgresql.org/docs/9.2/libpq-envars.html

4
vinh

Dieses Zertifikat-Update hat zwei Seiten:

  1. Auf der Serverseite: Alle RDS-Instanzen, die vor dem 01.11.2019 erstellt wurden, müssen neu gestartet werden. Dies führt zu einem Ausfall von ~ 5 Minuten. Dadurch werden sie aktualisiert, damit die neuen Zertifikate vorhanden sind.
  2. Wenn Ihre Clients SSL verwenden (standardmäßig deaktiviert/bevorzugt), müssen Sie die Zertifikate (Zwischenstufe + Kette) von AWS überall dort aktualisieren, wo Ihre Clients ausgeführt werden.

Postgres verwendet "bevorzugen" als Standardmethode für Clients, um eine Verbindung herzustellen. Dies bedeutet, dass sie SSL versuchen, falls verfügbar, aber zurückgreifen, wenn nicht. Bestehende Clients mit Standardverbindungskonfiguration funktionieren also weiterhin.

2
Ron Wail

Genau wie das Post-OP selbst geantwortet hat, hat postgres den Standard-sslmode auf prefer gesetzt, und dies ist der Auszug aus dem Dokument:

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

Standardmäßig überprüft der pg-Treiber die Zertifikate nur, wenn dies angegeben ist. und genau aus diesem Grund funktioniert es bei den ursprünglichen Fragen von OP zu Beginn sofort und auch nach dem Upgrade des RDS auf rds-ca-2019.

Eine der Umgebungsvariablen für die Verbindung zu Postgres ist DATABASE_URL, in Form von

postgres://username:[email protected]/database?sslmode=verify-full&sslrootcert=config/ca/rds-combined-ca-bundle.pem

hier können Sie sslmode und sslrootcert angeben, wenn Sie die Zwischenzertifikate überprüfen möchten. Der Inhalt von sslrootcert sollte einer der folgenden sein ...

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

HTH

2
MrAtheist

Bevor Sie die Zertifizierungsstelle in RDS ohne Verbindungsunterbrechung auf rds-ca-2019 aktualisieren, können Sie das Zertifikat clientseitig aktualisieren.

Wenn Ihr RDS rds-ca-2015 hat, sollten Sie den clientseitigen Schlüssel mit diesem https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem aktualisieren .

Gemäß AWS-Dokument https://docs.aws.Amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html Die Datei rds-kombinierte-ca-bundle.pem enthält beide Zertifikate als Zwischenprodukt und root.

Sobald Ihre Anwendungen eine kombinierte CA-Datei haben, sollten Sie mit dem Upgrade Ihres RDS auf die Zertifizierungsstelle rds-ca-2019 fortfahren.

Auf diese Weise können Sie ohne Ausfallzeit die Zertifizierungsstelle in RDS auf rds-ca-2019 aktualisieren.

1
Piyush Sonigra

Alle neuen RDS DB-Instanzen, die nach dem 1. November 2019 erstellt wurden, verwenden standardmäßig die neuen Zertifikate. Wenn Ihre RDS-Instanz vor dem oben genannten Datum erstellt wurde, müssen Sie das Zertifikat aktualisieren.

So ändern Sie die Zertifizierungsstelle für eine DB-Instanz von rds-ca-2015 in rds-ca-2019

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die Amazon RDS-Konsole unter https://console.aws.Amazon.com/rds/ .
  2. Wählen Sie im Navigationsbereich "Datenbanken" und anschließend die DB-Instanz aus, die Sie ändern möchten.
  3. Wählen Sie Ändern. Die Seite DB-Instanz ändern wird angezeigt. siehe Anhänge
  4. Wählen Sie im Abschnitt Netzwerk und Sicherheit die Option rds-ca-2019. siehe Anhänge.
  5. Wählen Sie Weiter und überprüfen Sie die Zusammenfassung der Änderungen.
  6. Um die Änderungen sofort zu übernehmen, wählen Sie "Sofort übernehmen". Die Auswahl dieser Option führt zu einem Ausfall.
  7. Überprüfen Sie auf der Bestätigungsseite Ihre Änderungen. Wenn sie korrekt sind, wählen Sie DB-Instanz ändern, um Ihre Änderungen zu speichern.
0