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

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

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. Standardmäßig verwendet und erwartet RDS for PostgreSQL, dass sich alle Clients über SSL/TLS verbinden, aber Sie können dies auch verlangen. RDS for PostgreSQL unterstützt die Transport Layer Security (TLS)-Versionen 1.1, 1.2 und 1.3.

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-Unterstützung ist in allen - AWS Regionen für PostgreSQL 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 .

  2. 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 veranschaulicht die Verwendung von psql, um eine Verbindung mit SSL und Zertifikatsüberprüfung mit einer PostgreSQL-DB-Instance herzustellen.

$ psql "host=db-name.555555555555.ap-southeast-1.rds.amazonaws.com -p 5432 dbname=testDB user=testuser sslrootcert=rds-ca-rsa2048-g1.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. Der Standardwert des Parameters rds.force_ssl ist für RDS für PostgreSQL Version 15 auf 1 (ein) festgelegt. Bei allen anderen Hauptversionen von RDS für PostgreSQL bis 14 ist der Standardwert des Parameters 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.

Wenn Sie den Wert dieses Parameters ändern möchten, müssen Sie eine benutzerdefinierte DB-Parametergruppe erstellen. Anschließend ändern Sie den Wert für rds.force_ssl in Ihrer benutzerdefinierten DB-Parametergruppe in 1, um diese Funktion zu aktivieren. Wenn Sie die benutzerdefinierte DB-Parametergruppe vorbereiten, bevor Sie Ihre RDS-for-PostgreSQL-DB-Instance erstellen, können Sie sie während des Erstellungsprozesses (anstelle einer Standardparametergruppe) auswählen. Wenn Sie diesen Schritt ausführen, nachdem Ihre RDS-for-PostgreSQL-DB-Instance bereits ausgeführt wird, müssen Sie die Instance neu starten, damit diese die benutzerdefinierte Parametergruppe verwendet. Weitere Informationen finden Sie unter Arbeiten mit Parametergruppen.

Wenn die rds.force_ssl-Funktion auf Ihrer DB-Instance aktiv ist, werden Verbindungsversuche ohne SSL mit der folgenden Meldung abgelehnt:

$ psql -h db-name.555555555555.ap-southeast-1.rds.amazonaws.com -p 5432 dbname=testDB user=testuser psql: error: FATAL: no pg_hba.conf entry for host "w.x.y.z", user "testuser", database "testDB", SSL off

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)

Wenn Sie detailliertere Informationen erhalten möchten, können Sie die folgende Abfrage verwenden, um Informationen von pg_settings abzurufen:

SELECT name as "Parameter name", setting as value, short_desc FROM pg_settings WHERE name LIKE '%ssl%'; Parameter name | value | short_desc ----------------------------------------+-----------------------------------------+------------------------------------------------------- ssl | on | Enables SSL connections. ssl_ca_file | /rdsdbdata/rds-metadata/ca-cert.pem | Location of the SSL certificate authority file. ssl_cert_file | /rdsdbdata/rds-metadata/server-cert.pem | Location of the SSL server certificate file. ssl_ciphers | HIGH:!aNULL:!3DES | Sets the list of allowed SSL ciphers. ssl_crl_file | | Location of the SSL certificate revocation list file. ssl_dh_params_file | | Location of the SSL DH parameters file. ssl_ecdh_curve | prime256v1 | Sets the curve to use for ECDH. ssl_key_file | /rdsdbdata/rds-metadata/server-key.pem | Location of the SSL server private key file. ssl_library | OpenSSL | Name of the SSL library. ssl_max_protocol_version | | Sets the maximum SSL/TLS protocol version to use. ssl_min_protocol_version | TLSv1.2 | Sets the minimum SSL/TLS protocol version to use. ssl_passphrase_command | | Command to obtain passphrases for SSL. ssl_passphrase_command_supports_reload | off | Also use ssl_passphrase_command during server reload. ssl_prefer_server_ciphers | on | Give priority to server ciphersuite order. (14 rows)

Sie können auch alle Informationen über die SSL-Nutzung Ihrer RDS-for-PostgreSQL-DB-Instance nach Prozess, Client und Anwendung sammeln, indem Sie die folgende Abfrage verwenden:

SELECT datname as "Database name", usename as "User name", ssl, client_addr, application_name, backend_type FROM pg_stat_ssl JOIN pg_stat_activity ON pg_stat_ssl.pid = pg_stat_activity.pid ORDER BY ssl; Database name | User name | ssl | client_addr | application_name | backend_type ---------------+-----------+-----+----------------+------------------------+------------------------------ | | f | | | autovacuum launcher | rdsadmin | f | | | logical replication launcher | | f | | | background writer | | f | | | checkpointer | | f | | | walwriter rdsadmin | rdsadmin | t | 127.0.0.1 | | client backend rdsadmin | rdsadmin | t | 127.0.0.1 | PostgreSQL JDBC Driver | client backend postgres | postgres | t | 204.246.162.36 | psql | client backend (8 rows)

Wenn Sie die Cipher identifizieren möchten, die für Ihre SSL-Verbindung verwendet wird, können Sie folgende Abfrage erstellen:

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

Weitere 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
16 HIGH:!aNULL:!3DES
15 HIGH:!aNULL:!3DES
14 HIGH:!aNULL:!3DES
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