Verwenden von SSL mit einer PostgreSQL-DB-Instance - Amazon Relational Database Service

Verwenden von SSL mit einer PostgreSQL-DB-Instance

Amazon RDS unterstützt die Secure Socket Layer (SSL)-Verschlüsselung für PostgreSQL-DB-Instances. Sie können die PostgreSQL-Verbindung zwischen Ihren Anwendungen und Ihren PostgreSQL-DB-Instances mit SSL verschlüsseln. Sie können auch festlegen, dass für alle Verbindungen zu Ihrer PostgreSQL-DB-Instance SSL verwendet werden soll. Amazon RDS for PostgreSQL unterstützt jetzt Transport Layer Security (TLS) in den Versionen 1.1 und 1.2.

Allgemeine Informationen zum SSL-Support und zu PostgreSQL-Datenbanken finden Sie unter SSL-Support in der PostgreSQL-Dokumentation. Informationen zur Verwendung einer SSL-Verbindung über JDBC finden Sie unter Konfigurieren des Clients in der PostgreSQL-Dokumentation.

SSL-Support ist in allen AWS-Regionen für Oracle verfügbar. Amazon RDS erzeugt ein SSL-Zertifikat für Ihre DB-Instance, wenn die Instance erstellt wird. Wenn Sie die SSL-Zertifikatsverifizierung aktivieren, enthält das SSL-Zertifikat den Endpunkt der DB-Instance als Allgemeinen Namen (Common Name, CN) für das SSL-Zertifikat, sodass es vor Spoofing-Angriffen schützt.

Herstellen einer Verbindung mit einer PostgreSQL-DB-Instance über SSL

So stellen Sie über SSL eine Verbindung zu einer PostgreSQL-DB-Instance her

  1. Laden Sie das Zertifikat herunter.

    Informationen zum Herunterladen von Zertifikaten finden Sie unter Verwenden von SSL/TLS für die Verschlüsselung einer Verbindung mit DB instance.

  2. Importieren Sie das Zertifikat in Ihr Betriebssystem.

    Beispiele für Skripte, die Zertifikate importieren, finden Sie unter Beispielskript für den Import von Zertifikaten in Ihren Trust Store.

  3. Stellen Sie über SSL eine Verbindung zu einer PostgreSQL-DB-Instance her.

    Wenn Sie eine Verbindung über SSL herstellen, kann Ihr Client entscheiden, ob die Zertifikatskette überprüft werden soll. Wenn Ihre Verbindungsparameter sslmode=verify-ca oder sslmode=verify-full angeben, verlangt Ihr Client, dass sich die RDS CA-Zertifikate im Trust Store befinden oder von der Verbindungs-URL referenziert werden. Diese Anforderung dient zur Prüfung der Zertifikatskette, die Ihr Datenbankzertifikat signiert.

    Wenn ein Client wie psql oder JDBC mit SSL-Unterstützung konfiguriert ist, versucht dieser zunächst standardmäßig, die Verbindung zur Datenbank über SSL herzustellen. Wenn der Client keine Verbindung über SSL herstellen kann, stellt er die Verbindung ohne SSL her. Der für libpq-basierte Clients (wie psql) und JDBC verwendete sslmode-Standardmodus ist unterschiedlich. Die libpq-basierten Clients verwenden standardmäßig prefer. JDBC-Clients verwenden standardmäßig verify-full.

    Verwenden Sie den Parameter sslrootcert, um auf das Zertifikat zu verweisen, beispielsweise sslrootcert=rds-ssl-ca-cert.pem.

Das folgende Beispiel zeigt psql zur Herstellung einer Verbindung mit einer PostgreSQL-DB-Instance:

$ psql -h testpg.cdhmuqifdpib.us-east-1.rds.amazonaws.com -p 5432 \ "dbname=testpg user=testuser sslrootcert=rds-ca-2019-root.pem sslmode=verify-full"

Erfordern einer SSL-Verbindung zu einer PostgreSQL-DB-Instance

Mit dem Parameter rds.force_ssl können Sie es erforderlich machen, dass Verbindungen zu Ihrer PostgreSQL-DB-Instance SSL verwenden müssen. Standardmäßig ist der Parameter rds.force_ssl auf 0 (aus) festgelegt. Sie können den Parameter rds.force_ssl auf 1 (ein) stellen und damit erforderlich machen, dass Verbindungen zu Ihrer PostgreSQL-DB-Instance SSL verwenden müssen. Die Aktualisierung des Parameters rds.force_ssl legt auch den PostgreSQL-Parameter ssl auf 1 (ein) fest und ändert die pg_hba.conf-Datei Ihrer DB-Instance, sodass die neue SSL-Konfiguration unterstützt wird.

Sie können den Parameterwert rds.force_ssl festlegen, indem Sie die Parametergruppe für Ihre DB-Instance aktualisieren. Wenn es sich bei der Parametergruppe für Ihre DB-Instance nicht um die Standardparametergruppe handelt und der Parameter ssl bereits auf 1 gesetzt ist, müssen Sie Ihre DB-Instances nicht neu starten, wenn Sie den Parameter rds.force_ssl auf 1 setzen. Andernfalls müssen Sie die DB-Instance neu starten, damit die Änderungen übernommen werden. Weitere Informationen zu Parametergruppen finden Sie unter Arbeiten mit DB-Parametergruppen.

Wenn der Parameter rds.force_ssl für eine DB-Instance auf 1 gesetzt ist, wird bei der Verbindung eine Ausgabe wie nachstehend dargestellt angezeigt, die angibt, dass jetzt SSL erforderlich ist:

$ psql postgres -h SOMEHOST.amazonaws.com -p 8192 -U someuser . . . SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) Type "help" for help. postgres=>

Bestimmen des SSL-Verbindungsstatus

Der verschlüsselte Status Ihrer Verbindung wird auf dem Anmelde-Banner angezeigt, wenn Sie sich mit der DB-Instance verbinden:

Password for user master: psql (10.3) SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) Type "help" for help.   postgres=>

Sie können auch die Erweiterung sslinfo laden und dann die Funktion ssl_is_used() aufrufen, um festzustellen, ob SSL verwendet wird. Die Funktion gibt t zurück, wenn für die Verbindung SSL genutzt wird. Andernfalls gibt sie f zurück.

postgres=> create extension sslinfo; CREATE EXTENSION postgres=> select ssl_is_used(); ssl_is_used --------- t (1 row)

Mit dem Befehl select ssl_cipher() können Sie das SSL-Verschlüsselungsverfahren bestimmen:

postgres=> select ssl_cipher(); ssl_cipher -------------------- DHE-RSA-AES256-SHA (1 row)

Wenn Sie set rds.force_ssl aktivieren und Ihre Instance neu starten, werden Nicht-SSL-Verbindungen abgelehnt und die folgende Mitteilung wird angezeigt:

$ export PGSSLMODE=disable $ psql postgres -h SOMEHOST.amazonaws.com -p 8192 -U someuser psql: FATAL: no pg_hba.conf entry for host "host.ip", user "someuser", database "postgres", SSL off $

Informationen zur Option sslmode finden Sie unter Datenbankverbindung-Steuerungsfunktionen in der PostgreSQL-Dokumentation.

SSL-Verschlüsselungssammlungen in RDS for PostgreSQL

Der PostgreSQL-Konfigurationsparameter ssl_ciphers gibt die Kategorien von Cipher Suites an, die für SSL-Verbindungen zulässig sind. In der folgenden Tabelle sind die in verwendeten Standard-Cipher Suites aufgeführt RDS for PostgreSQL.

PostgreSQL-Engine-Version Cipher Suites
13 HIGH:!aNULL:!3DES
12 HIGH:!aNULL:!3DES
11.4 und höhere Nebenversionen HIGH:MEDIUM:+3DES:!aNULL:!RC4
11,1, 11,2 HIGH:MEDIUM:+3DES:!aNULL
10.9 und höhere Nebenversionen HIGH:MEDIUM:+3DES:!aNULL:!RC4
10.7 und niedrigere Nebenversionen HIGH:MEDIUM:+3DES:!aNULL
9.6.14 und höhere Nebenversionen HIGH:MEDIUM:+3DES:!aNULL:!RC4
9.6.12 und niedrigere Nebenversionen HIGH:MEDIUM:+3DES:!aNULL