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 RDS for PostgreSQL und erwartet, dass alle Clients eine Verbindung herstellen SSL/TLS. Sie können es aber auch vorschreiben. RDS for PostgreSQL unterstützt Transport Layer Security (TLS) in den Versionen 1.1 und 1.2. RDS für PostgreSQL 16 und höher unterstützt TLS Version 1.3.
Allgemeine Informationen zum SSL-Support und zu PostgreSQL-Datenbanken finden Sie unter SSL-Support
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.
Themen
Herstellen einer Verbindung mit einer PostgreSQL-DB-Instance über SSL
So stellen Sie über SSL eine Verbindung zu einer PostgreSQL-DB-Instance her
-
Laden Sie das Zertifikat herunter.
Informationen zum Herunterladen von Zertifikaten finden Sie unter Wird verwendet SSL/TLS , um eine Verbindung zu einer Datenbank zu verschlüsseln Instanz oder Cluster .
-
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-caodersslmode=verify-fullangeben, 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 und JDBC-Clients verwenden standardmäßigprefer.Verwenden Sie den Parameter
sslrootcert, um auf das Zertifikat zu verweisen, beispielsweisesslrootcert=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
port=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 15 und höher auf „1 (ein)“ festgelegt. Bei allen anderen Hauptversionen von RDS für PostgreSQL bis Version 14 ist der Standardwert des Parameters auf „0 (aus)“ festgelegt. Sie können den rds.force_ssl Parameter auf 1 (on) setzen, damit er SSL/TLS für Verbindungen zu Ihrem DB-Cluster erforderlich ist. 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 Parametergruppen für Amazon RDS.
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 port=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 EXTENSIONpostgres=>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
SSL-Verschlüsselungssammlungen in RDS für PostgreSQL
Bei Verwendung von TLS 1.2 und früheren Versionen gibt der PostgreSQL-Konfigurationsparameter ssl_ciphers
In RDS für PostgreSQL 16 und höher können Sie den Parameter ssl_ciphers so ändern, dass bestimmte Werte aus den zulässigen Verschlüsselungs-Suiten verwendet werden. Dies ist ein dynamischer Parameter, der keinen Neustart der Datenbank-Instance erfordert. Verwenden Sie entweder die Amazon-RDS-Konsole oder den folgenden AWS
-CLI-Befehl, um die zulässigen Verschlüsselungs-Suiten anzuzeigen:
aws rds describe-db-parameters --db-parameter-group-name<your-parameter-group>--region<region>--endpoint-url<endpoint-url>--output json | jq '.Parameters[] | select(.ParameterName == "ssl_ciphers")'
In der folgenden Tabelle sind sowohl die standardmäßigen als auch die zulässigen Verschlüsselungs-Suiten für Versionen aufgeführt, die benutzerdefinierte Konfigurationen unterstützen.
| PostgreSQL-Engine-Version | Standardwerte für die ssl_cipher-Suite | Zulässige benutzerdefinierte Werte für die ssl_cipher-Suite |
|---|---|---|
| 18 | HIGH:!aNULL:!3DES |
|
| 17 | HIGH:!aNULL:!3DES |
|
| 16 | HIGH:!aNULL:!3DES |
|
| 15 | HIGH:!aNULL:!3DES |
Benutzerdefinierte ssl_ciphers werden nicht unterstützt. |
| 14 | HIGH:!aNULL:!3DES |
Benutzerdefinierte ssl_ciphers werden nicht unterstützt. |
| 13 | HIGH:!aNULL:!3DES |
Benutzerdefinierte ssl_ciphers werden nicht unterstützt. |
| 12 | HIGH:!aNULL:!3DES |
Benutzerdefinierte ssl_ciphers werden nicht unterstützt. |
| 11.4 und höhere Nebenversionen | HIGH:MEDIUM:+3DES:!aNULL:!RC4 |
Benutzerdefinierte ssl_ciphers werden nicht unterstützt. |
| 11,1, 11,2 | HIGH:MEDIUM:+3DES:!aNULL |
Benutzerdefinierte ssl_ciphers werden nicht unterstützt. |
| 10.9 und höhere Nebenversionen | HIGH:MEDIUM:+3DES:!aNULL:!RC4 |
Benutzerdefinierte ssl_ciphers werden nicht unterstützt. |
| 10.7 und niedrigere Nebenversionen | HIGH:MEDIUM:+3DES:!aNULL |
Benutzerdefinierte ssl_ciphers werden nicht unterstützt. |
Um alle Instance-Verbindungen für die Verwendung der Verschlüsselungs-Suite TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 zu konfigurieren, ändern Sie die Parametergruppe wie im folgenden Beispiel gezeigt:
aws rds modify-db-parameter-group --db-parameter-group-name<your-parameter-group>--parameters "ParameterName='ssl_ciphers',ParameterValue='TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384',ApplyMethod=immediate"
In diesem Beispiel wird eine ECDSA-Verschlüsselung verwendet, bei der die Instance eine Zertifizierungsstelle mit ECC (Elliptic Curve Cryptography, elliptische Kurven-Kryptografie) nutzen muss, um eine Verbindung herzustellen. Informationen zu den von Amazon RDS bereitgestellten Zertifizierungsstellen finden Sie unter Zertifizierungsstellen.
Standardmäßig ist der Wert von ssl_max_protocol_version in RDS für PostgreSQL 16 und höher TLS v1.3. TLS v1.3 verwendet die im Parameter angegebenen Verschlüsselungskonfigurationen nicht. ssl_ciphers Um nur die in definierten Chiffren zu verwendenssl_ciphers, müssen Sie die Konfiguration auf TLS v1.2 vornehmen. ssl_max_protocol_version
aws rds modify-db-parameter-group --db-parameter-group-name<your-parameter-group>--parameters "ParameterName='ssl_max_protocol_version',ParameterValue='TLSv1.2',ApplyMethod=immediate"
Der PostgreSQL-Konfigurationsparameter ssl_tls13_ciphers gibt die Cipher
In RDS for PostgreSQL 18 und höher können Sie den ssl_tls13_ciphers Parameter so ändern, dass er bestimmte Werte aus den Chiffrier-Suites auf der Zulassungsliste verwendet. Dies ist ein dynamischer Parameter, der keinen Neustart der Datenbank-Instance erfordert.
In der folgenden Tabelle sind die standardmäßigen und auf der Zulassungsliste aufgeführten benutzerdefinierten ssl_tls13_ciphers Werte nach Hauptversionen der Engine aufgeführt.
| PostgreSQL-Engine-Version | Standardwerte ssl_tls13_ciphers |
Zulassen aufgelisteter benutzerdefinierter Werte ssl_tls13_ciphers |
|---|---|---|
| 18 | Keine. PostgreSQL verwendet den Standardsatz von Cipher Suites aus der TLS-Bibliothek (). AWS-LC |
|
Sie können die verwendeten Verschlüsselungen mithilfe der unter Bestimmen des SSL-Verbindungsstatus beschriebenen Methoden überprüfen.
Verschlüsselungen können je nach Kontext unterschiedliche Namen haben:
-
Die zulässigen Verschlüsselungen, die Sie in der Parametergruppe konfigurieren können, werden mit ihren IANA-Namen bezeichnet.
-
Die Anmeldebanner
sslinfoundpsqlverweisen auf Verschlüsselungen, die ihre OpenSSL-Namen verwenden.
Für TLS v1.3 sind die Namen OpenSSL und IANA identisch.
Um sich zu vergewissern, dass Datenbankverbindungen SSL verwenden, legen Sie rds.force_ssl
parameter in der Parametergruppe auf 1 fest. Weitere Informationen zu Parametern und Parametergruppen finden Sie unter Parametergruppen für Amazon RDS.
TLS-Schlüsselaustauschgruppen in RDS für PostgreSQL
Der ssl_groups Parameter gibt die benannten Gruppen an, die für den TLS-Schlüsselaustausch verwendet werden sollen. Weitere Informationen finden Sie unter ssl_groups
In RDS for PostgreSQL 18 und höher können Sie den ssl_groups so ändern, dass er bestimmte Werte aus den zugelassenen Gruppen verwendet. Dies ist ein dynamischer Parameter, für den kein Neustart erforderlich ist.
In der folgenden Tabelle sind die benutzerdefinierten Standardwerte und die auf der Zulassungsliste aufgeführten benutzerdefinierten ssl_groups Werte nach Hauptversionen der Engine aufgeführt.
| PostgreSQL-Engine-Version | Standardwerte ssl_groups |
Zulassen aufgelisteter benutzerdefinierter Werte ssl_groups |
|---|---|---|
| 18 | prime256v1:X25519 |
|
Beachten Sie bei der Konfiguration ssl_groups das folgende Verhalten:
-
Die Reihenfolge der Liste legt die Serverpräferenz fest. Die erste Gruppe in der Liste, die der Client ebenfalls unterstützt, wird für eine Verbindung verwendet.
-
ssl_groupsgilt nur für den Schlüsselaustausch, der benannte Gruppen verwendet.ssl_groupsWird beispielsweise von TLS v1.2-Verschlüsselungssammlungen ignoriert, die den RSA-Schlüsselaustausch verwenden. Um nur die angegebenen Gruppen zu verwenden, stellen Sie sicher, dass diese Option aktiviert ist.rds.force_sslStellenssl_min_protocol_versionSie dann entweder ECDHE-based Suiten für TLS v1.2-basiertessl_ciphersVerbindungen ein oder beschränken Sie sich auf diese.TLSv1.3ML-KEM Gruppen benötigen TLS v1.3. Um zu erzwingen, dass sie verwendet werden, setzen Sie
ssl_min_protocol_versionaufTLSv1.3.
Weitere Informationen zum Ändern von Parametern und Parametergruppen finden Sie unter Parametergruppen für Amazon RDS.