New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Wie verwende ich eine SSL-Verbindung, um erfolgreich eine Verbindung zu meiner Amazon RDS-Instance herzustellen?
Ich möchte eine Secure Socket Layer (SSL)-Verbindung verwenden, um eine Verbindung zu meiner Amazon Relational Database Service (Amazon RDS) DB-Instance herzustellen.
Kurzbeschreibung
Verwende SSL oder Transport Layer Security (TLS) aus deiner Anwendung, um eine Verbindung zu einer DB-Instance zu verschlüsseln, auf der MySQL, MariaDB, Microsoft SQL Server, Oracle oder PostgreSQL ausgeführt werden. SSL/TLS-Verbindungen bieten eine Sicherheitsschicht, da die Verbindungen Daten verschlüsseln, die zwischen deinem Client und der DB-Instance übertragen werden. Ein Serverzertifikat bietet eine zusätzliche Sicherheitsschicht, da es bestätigt, dass die Verbindung zu einer Amazon RDS-DB-Instance hergestellt wird.
Wenn du eine DB-Instance bereitstellst, erstellt Amazon RDS ein SSL-Zertifikat und installiert das Zertifikat auf der Instance. Diese Zertifikate werden von einer Zertifizierungsstelle (CA) signiert. Das SSL-Zertifikat enthält den DB-Instance-Endpunkt als allgemeinen Namen für das SSL-Zertifikat, um die Instance vor Spoofing-Angriffen zu schützen. Ein von Amazon RDS erstelltes SSL-Zertifikat ist die vertrauenswürdige Root-Entität und funktioniert in den meisten Fällen. Wenn die Anwendung jedoch keine Zertifikatsketten akzeptiert, schlägt das Zertifikat möglicherweise fehl. Verwende in solchen Fällen ein Zwischenzertifikat, um eine Verbindung zu deiner AWS-Region herzustellen. Wenn du beispielsweise SSL verwendest, um eine Verbindung zu den Regionen von AWS GovCloud (USA) herzustellen, musst du ein Zwischenzertifikat verwenden.
Du kannst ein Zertifikatspaket, das sowohl die Zwischen- als auch die Stammzertifikate für alle Regionen enthält, von AWS Trust Services herunterladen. Wenn die Anwendung unter Microsoft Windows läuft und eine PKCS7-Datei benötigt, kannst du das PKCS7-Zertifikatspaket von Amazon Trust Services herunterladen. Dieses Paket enthält sowohl das Zwischen- als auch das Stammzertifikat.
Lösung
Jede Datenbank-Engine hat ihren eigenen Prozess zur Implementierung von SSL/TLS. Um eine SSL/TLS-Verbindung für den DB-Cluster zu implementieren, verwende eine der folgenden Methoden, die auf der Datenbank-Engine basieren.
Amazon RDS für Oracle
Füge für Amazon RDS für Oracle-Instances die SSL-Option zur benutzerdefinierten Optionsgruppe hinzu, um den SSL-Modus zu aktivieren.
RDS für Oracle unterstützt die TLS-Versionen 1.0 und 1.2. Um die Oracle SSL-Option zu verwenden, verwende die Optionseinstellung SQLNET.SSL_VERSION in der Optionsgruppe. Die folgenden Werte sind für diese Optionseinstellung zulässig:
- „1.0" – Clients können nur mithilfe von TLS 1.0 eine Verbindung zur DB-Instance herstellen.
- „1.2" – Clients können nur mithilfe von TLS 1.2 eine Verbindung zur DB-Instance herstellen.
- „1.2 oder 1.0" – Clients können mithilfe von TLS 1.2 oder 1.0 eine Verbindung zur DB-Instance herstellen.
Bei bestehenden Oracle SSL-Optionen wird SQLNET.SSL_VERSION automatisch auf „1.0“ gesetzt. Du kannst die Einstellung bei Bedarf ändern.
Du musst den SQL*Plus-Client für die Verwendung von SSL konfigurieren, bevor du eine Verbindung zu einer Oracle-DB-Instance herstellst, die die Oracle SSL-Option verwendet. Um eine SSL-Verbindung über JDBC zu verwenden, musst du einen Keystore erstellen, dem Amazon RDS-Root-CA-Zertifikat vertrauen und dann die SSL-Verbindung konfigurieren.
Beispielcode, der JDBC verwendet, um die SSL-Verbindung einzurichten:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class OracleSslConnectionTest { private static final String DB_SERVER_NAME = "example-dns"; private static final Integer SSL_PORT = "example-ssl-option-port-in-option-group"; private static final String DB_SID = "example-oracle-sid"; private static final String DB_USER = "example-username"; private static final String DB_PASSWORD = "example-password"; // This key store has only the prod root ca. private static final String KEY_STORE_FILE_PATH = "example-file-path-to-keystore"; private static final String KEY_STORE_PASS = "example-keystore-password"; public static void main(String[] args) throws SQLException { final Properties properties = new Properties(); final String connectionString = String.format( "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=%s)(PORT=%d))(CONNECT_DATA=(SID=%s)))", DB_SERVER_NAME, SSL_PORT, DB_SID); properties.put("example-username", DB_USER); properties.put("example-password", DB_PASSWORD); properties.put("oracle.jdbc.J2EE13Compliant", "true"); properties.put("javax.net.ssl.trustStore", KEY_STORE_FILE_PATH); properties.put("javax.net.ssl.trustStoreType", "JKS"); properties.put("javax.net.ssl.trustStorePassword", KEY_STORE_PASS); final Connection connection = DriverManager.getConnection(connectionString, properties); // If there is no exception, it means that an SSL connection can be opened } }
Bevor du SSL verwendest, um eine Verbindung zur RDS für Oracle-Instance herzustellen, überprüfe Folgendes:
- Das RDS-Stammzertifikat wird heruntergeladen und einer Wallet-Datei hinzugefügt. Diese Datei wird in einem Verzeichnis gespeichert, das durch den Parameter WALLET_LOCATION in der Datei sqlnet.ora angegeben wird.
- Du hast die richtige SSL-Portnummer im TNS-Eintrag.
- Die Amazon RDS-Sicherheitsgruppe ist so konfiguriert, dass sie eingehende Verbindungen von den Maschinen über den SSL-Port zulässt.
- Die Firewall oder die Sicherheitsrichtlinien sind entsprechend konfiguriert, um den Datenverkehr auf dem SSL-Port von Amazon RDS zuzulassen.
Amazon RDS für MariaDB
Amazon RDS für MariaDB unterstützt die TLS-Versionen 1.0, 1.1, 1.2 und 1.3. Bei einer unidirektionalen TLS-Verbindung wird TLS ohne Client-Zertifikat verwendet, und nur der Server kann authentifiziert werden. Daher ist eine Authentifizierung nur in einer Richtung möglich. Eine Verschlüsselung ist jedoch weiterhin in beide Richtungen möglich. Weitere Informationen findest du unter Activating one-way TLS for MariaDB clients (Aktivieren von undirektionalen TLS für MariaDB-Clients) auf der MariaDB-Website.
Bei der Serverzertifikatsüberprüfung überprüft der Client, ob das Zertifikat zum Server gehört. Weitere Informationen findest du unter Server certificate verification (Überprüfung des Serverzertifikats) auf der MariaDB-Website.
Um den MySQL 5.7-Client oder höher mit dem RDS-Zertifikat zu starten, führe einen Befehl ähnlich dem folgenden aus:
mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com -u testuser -p --ssl-ca=[full path]global-bundle.pem --ssl-mode=VERIFY_IDENTITY
Um den MariaDB-Client mit RDS-Zertifikat zu starten, führe einen Befehl ähnlich dem folgenden aus:
mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com -u testuser -p --ssl-ca=[full path]global-bundle.pem --ssl-verify-server-cert
Um SSL-Verbindungen für bestimmte Benutzer oder Konten anzufordern, führe die folgende Abfrage basierend auf deiner MariaDB-Version aus:
ALTER USER 'test'@'%' REQUIRE SSL;
Prüfe für RDS für MariaDB Version 10.5 und höher mit aktiviertem Leistungsschema und Anwendungen, die mit einer Datenbank-Instance verbunden sind, welche Verbindungen SSL/TLS verwenden:
MariaDB> SELECT id, user, host, connection_type FROM performance_schema.threads pst INNER JOIN information_schema.processlist isp ON pst.processlist_id = isp.id;
Hinweis: Weitere Informationen zum Leistungsschema findest du unter Performance Schema (Leistungsschema) auf der MariaDB-Website.
Amazon RDS für MySQL
MySQL verwendet OpenSSL für sichere Verbindungen. Weitere Informationen findest du unter SSL/TLS-Unterstützung für MySQL-DB-Instances auf Amazon RDS.
Standardmäßig versuchen MySQL-Client-Programme, eine verschlüsselte Verbindung herzustellen, wenn der Server verschlüsselte Verbindungen unterstützt. Verwende für zusätzliche Sicherheit den Parameter --ssl-ca, um auf das SSL-Zertifikat zu verweisen, das den DB-Instance-Endpunkt als allgemeinen Namen enthält. Das SSL-Zertifikat schützt die Instance vor Spoofing-Angriffen.
Um den Parameter**--ssl-ca** für MySQL 5.7 und höher zum Starten des Clients zu verwenden, führe einen Befehl ähnlich dem folgenden aus:
mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com -u testuser -p --ssl-ca=[full path]global-bundle.pem --ssl-mode=VERIFY_IDENTITY
Um SSL-Verbindungen für bestimmte Benutzer oder Konten anzufordern, führe je nach deiner MySQL-Version einen Befehl aus, der dem folgenden ähnelt:
mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com -u testuser -p --ssl-ca=[full path]global-bundle.pem --ssl-verify-server-cert
Führe für MySQL 5.7 und höher den folgenden Befehl aus:
ALTER USER 'testuser'@'%' REQUIRE SSL;
Prüfe für RDS für MySQL Version 5.7 oder 8.0 mit aktiviertem Leistungsschema und Anwendungen, die mit einer Datenbank-Instance verbunden sind, welche Verbindungen SSL/TLS verwenden:
mysql> SELECT id, user, host, connection_type FROM performance_schema.threads pst INNER JOIN information_schema.processlist isp ON pst.processlist_id = isp.id;
Hinweis: Weitere Informationen zum Leistungsschema findest du unter Performance Schema (Leistungsschema) auf der MariaDB-Website.
Amazon RDS für Microsoft SQL Server
Um SSL für die Verbindung mit der RDS für Microsoft SQL Server-DB-Instance zu verwenden, kannst du SSL für alle Verbindungen erzwingen oder bestimmte Verbindungen verschlüsseln.
Um Verbindungen von anderen SQL-Clients zu verschlüsseln, füge encrypt=true an die Verbindungszeichenfolge an. Diese Zeichenfolge ist möglicherweise als Option oder als Eigenschaft auf der Verbindungsseite in den GUI-Tools verfügbar.
Führe die folgende Abfrage aus, um dich zu vergewissern, dass deine Verbindung verschlüsselt ist:
SELECT ENCRYPT_OPTION FROM SYS.DM_EXEC_CONNECTIONS WHERE SESSION_ID = @@SPID;
Stelle sicher, dass die Abfrage für encrypt_option den Wert true zurückgibt.
Hinweis: Um die SSL-Verschlüsselung für Clients zu aktivieren, die JDBC für die Verbindung verwenden, musst du möglicherweise das RDS-SQL-Zertifikat zum Java CA Certificate (cacerts) Store hinzufügen. Verwende dazu das keytool-Hilfsprogramm.
Amazon RDS für PostgreSQL
Amazon RDS unterstützt die SSL-Verschlüsselung für PostgreSQL-DB-Instances. Weitere Informationen findest du unter SSL mit einer PostgreSQL-DB-Instance verwenden.
Bevor du über SSL eine Verbindung zu einer RDS für PostgreSQL-DB-Instance herstellst, führe die folgenden Schritte aus:
- Lade das Zertifikat herunter.
- Importiere das Zertifikat in dein Betriebssystem.
Weitere Informationen findest du unter Verbindung zu einer PostgreSQL-DB-Instance über SSL herstellen.
Verwende den Parameter sslrootcert, um auf das Zertifikat zu verweisen. Zum Beispiel sslrootcert=rds-ssl-ca-cert.pem:
psql "host=myinstance.123456789012.rds-us-east-1.amazonaws.com port=5432 user=testuser dbname=testpg sslmode=verify-full sslrootcert=global-bundle.pem"
Um die Verbindungen zu deiner RDS für PostgreSQL-Instance für die Verwendung von SSL zu konfigurieren, setze rds.force_ssl in der benutzerdefinierten Parametergruppe auf 1 (on). Standardmäßig ist dieser Wert auf 0 (off) gesetzt.
Wenn du rds.force_ssl auf 1 (on) setzt, wird die Datei pg_hba.conf der DB-Instance so geändert, dass sie die neue SSL-Konfiguration unterstützt. Verwende die Ansicht pg_hba_file_rules, um die Zusammenfassung des Inhalts der Datei pg_hba.conf zu sehen. Weitere Informationen findest du unter pg_hba_file_rules auf der PostgreSQL-Website.
Wenn du rds.force_ssl auf 0 (off) setzt, sieht die Datei pg_hba.conf etwa wie folgt aus:
SELECT * FROM pg_hba_file_rules; line_number | type | database | user_name | address | netmask | auth_method | options | error -------------+-------+-------------------+------------+----------+---------+-------------+---------+------- 4 | local | {all} | {all} | | | md5 | | 10 | host | {all} | {rdsadmin} | samehost | | md5 | | 11 | host | {all} | {rdsadmin} | all | | reject | | 12 | host | {rdsadmin} | {all} | all | | reject | | 13 | host | {all} | {all} | all | | md5 | | 14 | host | {replication} | {all} | samehost | | md5 | | 15 | host | {rds_replication} | {all} | all | | md5 | | (7 rows)
Wenn du rds.force_ssl auf 1 (on) setzt, sieht die Datei pg_hba.conf etwa wie folgt aus:
SELECT * FROM pg_hba_file_rules; line_number | type | database | user_name | address | netmask | auth_method | options | error -------------+---------+-------------------+------------+----------+---------+-------------+---------+------- 4 | local | {all} | {all} | | | md5 | | 10 | host | {all} | {rdsadmin} | samehost | | md5 | | 11 | host | {all} | {rdsadmin} | all | | reject | | 12 | host | {rdsadmin} | {all} | all | | reject | | 13 | hostssl | {all} | {all} | all | | md5 | | 14 | host | {replication} | {all} | samehost | | md5 | | 15 | hostssl | {rds_replication} | {all} | all | | md5 | |
Hinweis: Der Typwert für line_number (13) wird möglicherweise auf hostssl aktualisiert, nachdem rds.force_ssl auf 1 (on) gesetzt wurde.
Nachdem du die SSL-Verbindung auf der Instance aktiviert und eine Verbindung zur RDS für PostgreSQL-Instance initiiert hast, wird eine Meldung ähnlich der folgenden angezeigt:
psql "host=myinstance.123456789012.rds-us-east-1.amazonaws.com port=5432 user=testuser dbname=testpg"
. . . SL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) Type "help" for help.
Alle Nicht-SSL-Verbindungen werden mit der folgenden Meldung abgelehnt:
psql "host=myinstance.123456789012.rds-us-east-1.amazonaws.com port=5432 user=testuser dbname=testpg sslmode=disable"psql: FATAL: no pg_hba.conf entry for host "host.ip", user "testuser", database "testpg", SSL off
Ähnliche Informationen
Verwenden von SSL/TLS zum Verschlüsseln einer Verbindung zu einer DB-Instance oder einem Cluster
Ähnliche Videos


Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Monat
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren