Établissez une connexion SSL chiffrée vers une instance ApsaraDB RDS for PostgreSQL en utilisant pgAdmin, psql ou JDBC.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Activé le chiffrement SSL pour l'instance RDS. Si ce n'est pas encore fait, consultez la rubrique Configurer un certificat cloud pour activer le chiffrement SSL ou Configurer un certificat personnalisé pour activer le chiffrement SSL.
Le fichier du certificat CA du serveur. Pour obtenir ce fichier, reportez-vous aux sections Configurer le chiffrement SSL pour une instance ApsaraDB RDS for PostgreSQL ou Configurer un certificat personnalisé sur une instance ApsaraDB RDS for PostgreSQL.
(Si vous avez configuré un certificat CA client) Les fichiers
client.crtetclient.key. Consultez la rubrique Configurer un certificat CA client sur une instance ApsaraDB RDS for PostgreSQL.
Choisir une méthode de connexion
| Outil | Meilleur usage |
|---|---|
| pgAdmin | Gestion de base de données via interface graphique et requêtes interactives |
| psql | Scripts, automatisation et workflows en ligne de commande |
| JDBC | Applications Java se connectant à la base de données par programmation |
Référence des modes SSL
Les trois méthodes de connexion utilisent les mêmes valeurs de mode SSL. Choisissez celle qui correspond à vos exigences de sécurité :
| Mode SSL | Comportement | Quand l'utiliser |
|---|---|---|
require |
Chiffre la connexion sans valider le certificat du serveur | Chiffrement de base sans vérification du certificat |
verify-ca |
Chiffre la connexion et valide le certificat CA du serveur | Recommandé pour la plupart des cas d'utilisation en production |
verify-full |
Chiffre la connexion, valide le certificat CA du serveur et vérifie que le CN ou le DNS du certificat correspond au point de terminaison de connexion | Sécurité maximale ; protège contre les attaques de type « man-in-the-middle » |
disable |
Aucun chiffrement SSL. Disponible uniquement si aucune liste de contrôle d'accès (ACL) n'est configurée sur l'instance | Développement ou tests exclusivement dans des réseaux de confiance |
Si des ACL sont configurées sur l'instance RDS, celle-ci n'accepte que les connexions SSL. Définissez le mode SSL surrequire,verify-caouverify-full.
Se connecter avec pgAdmin
pgAdmin 4 est inclus lors de l'installation de PostgreSQL depuis le site officiel de PostgreSQL. Pour utiliser pgAdmin sans installer PostgreSQL, téléchargez-le séparément depuis pgAdmin.
Les étapes suivantes utilisent pgAdmin 4 V6.2.0 à titre d'exemple.
-
Démarrez pgAdmin 4.
Lors de la première connexion, pgAdmin vous demande de définir un mot de passe maître pour protéger les mots de passe et les identifiants enregistrés.
-
Cliquez avec le bouton droit sur Servers, puis choisissez Register > Server.

-
Dans l'onglet General, saisissez un nom pour le serveur.

-
Dans l'onglet Connection, renseignez les détails de la connexion.
Paramètre Description Host name/address Point de terminaison de l'instance RDS. Utilisez le point de terminaison interne pour les connexions VPC, ou le point de terminaison public pour les connexions Internet. Vous trouverez cette information sur la page Database Connection. Consultez la rubrique Afficher et modifier les points de terminaison et les numéros de port d'une instance ApsaraDB RDS for PostgreSQL. Port Numéro de port pour la connexion. Vous trouverez cette information sur la page Database Connection. Username Nom d'utilisateur du compte de base de données. Consultez la rubrique Créer une base de données et un compte. Password Mot de passe du compte de base de données. 
-
Dans l'onglet Parameters, configurez les paramètres SSL.
Vous pouvez utiliser soit un certificat personnalisé (
server-ca.crt), soit un certificat cloud (ApsaraDB-CA-Chain.pem) comme certificat racine. Indiquez le chemin d'accès réel sur votre système.Paramètre Description SSL mode Mode SSL. Consultez la section Référence des modes SSL pour connaître les valeurs disponibles et leur utilisation. Client certificate Chemin d'accès vers client.crt. Requis uniquement si vous avez configuré un certificat CA client.Client certificate key Chemin d'accès vers client.key. Requis uniquement si vous avez configuré un certificat CA client.Root certificate Chemin d'accès vers le fichier du certificat CA du serveur. Requis lorsque le paramètre SSL mode est défini sur Verify-CA ou Verify-Full. -
Cliquez sur Save. Si la connexion réussit, l'arborescence de la base de données s'affiche dans le panneau pgAdmin.
ImportantLa base de données
postgresest la base de données système par défaut. N'effectuez aucune opération dessus.
Se connecter avec psql
Le client PostgreSQL doit être installé sur votre machine. Consultez la documentation PostgreSQL .
-
Dans le répertoire
/var/lib/pgsql, créez un dossier nommé.postgresql.mkdir /var/lib/pgsql/.postgresql -
Copiez les fichiers de certificat dans le dossier
.postgresql.Les fichiers
client.crtetclient.keysont requis uniquement si vous avez configuré un certificat CA client. Vous pouvez utiliser soit un certificat personnalisé (server-ca.crt), soit un certificat cloud (ApsaraDB-CA-Chain.pem). Utilisez le chemin d'accès réel lors de l'exécution des commandes.cp client.crt client.key server-ca.crt /var/lib/pgsql/.postgresql/ -
Définissez le propriétaire et les permissions des fichiers dans le dossier
.postgresql.chown postgres:postgres /var/lib/pgsql/.postgresql/* chmod 600 /var/lib/pgsql/.postgresql/* -
Ouvrez le fichier des variables d'environnement pour le modifier.
vim /var/lib/pgsql/.bash_profile -
Appuyez sur
ipour entrer en mode édition, puis ajoutez les variables d'environnement suivantes :export PGSSLCERT="/var/lib/pgsql/.postgresql/client.crt" export PGSSLKEY="/var/lib/pgsql/.postgresql/client.key" export PGSSLROOTCERT="/var/lib/pgsql/.postgresql/ca1.crt" Appuyez sur
Escpour quitter le mode édition, puis saisissez:wqpour enregistrer et quitter.-
Rechargez les variables d'environnement.
source .bash_profile -
Définissez le mode SSL.
export PGSSLMODE="verify-full" -
Connectez-vous à l'instance RDS.
Espace réservé Description Où le trouver <Endpoint>Point de terminaison protégé par SSL de l'instance RDS Champ Protected Host dans l'onglet SSL Encryption de la page Data Security <Username>Nom d'utilisateur du compte de base de données Page Accounts <Port number>Numéro de port (par défaut : 5432)Page Database Connection <Database name>Nom de la base de données à laquelle se connecter Page Database Connection psql -h <Endpoint> -U <Username> -p <Port number> -d <Database name>Remplacez les espaces réservés par vos valeurs réelles :
La base de données postgres est la base de données système par défaut. N'effectuez aucune opération dessus.
Se connecter avec JDBC
Étape 1 : Obtenir les fichiers de certificat
Téléchargez les fichiers suivants sur l'hôte où s'exécute votre application Java :
server-ca.crt: Certificat CA du serveur. Reportez-vous à la section Prérequis pour savoir comment l'obtenir.client.crtetclient.key: Requis uniquement si vous avez configuré un certificat CA client.
Étape 2 : Convertir la clé privée client au format PKCS8 (PK8)
JDBC nécessite que la clé privée client soit au format PKCS8 (PK8). Exécutez la commande suivante sur l'hôte où s'exécute votre application :
openssl pkcs8 -topk8 -inform PEM -in client.key -outform der -out client.pk8 -v1 PBE-MD5-DES
# Enter the encryption password when prompted. You will use this password in your code.
Enter Encryption Password:
Verifying - Enter Encryption Password:
Exécutez cette commande sur le même hôte que celui où s'exécute votre application. Si vous l'exécutez sur un autre hôte puis copiez le fichier, les erreurs suivantes peuvent survenir :
org.postgresql.util.PSQLException: Could not decrypt SSL key file C:/Users/XXX/XXX/client.pk8org.postgresql.util.PSQLException: SSL error: Received fatal alert: unexpected_message
Étape 3 : Ajouter la dépendance du pilote JDBC PostgreSQL
Ajoutez la dépendance suivante à votre fichier pom.xml :
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.10</version>
</dependency>
Étape 4 : Se connecter à l'instance RDS
L'exemple ci-dessous utilise un certificat personnalisé (server-ca.crt). Pour utiliser un certificat cloud, remplacezserver-ca.crtparApsaraDB-CA-Chain.pem.
public class PgSslDemo {
public static void main(String[] args) {
// Endpoint of the RDS instance
String hostname = "pgm-bp1gclw58u36s6****.pg.rds.aliyuncs.com";
// Port number (default: 5432)
String port = "5432";
// Database name
String dbname = "postgres";
String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbname + "?binaryTransfer=true";
Properties properties = new Properties();
// Database account username
properties.setProperty("user", "test_user");
// Database account password
properties.setProperty("password", "test_pwd");
// Directory where certificate files are stored
String path = "D:\\ssl\\";
// Enable SSL
properties.setProperty("ssl", "true");
// Path to the server CA certificate
properties.setProperty("sslrootcert", path + "/" + "server-ca.crt");
// Path to the client private key (PKCS8 format)
properties.setProperty("sslkey", path + "/" + "client.pk8");
// Path to the client certificate
properties.setProperty("sslcert", path + "/" + "client.crt");
// The encryption password set when converting client.key to PKCS8 format
properties.setProperty("sslpassword", "test_ssl_pwd");
// SSL mode: require, verify-ca, or verify-full
properties.setProperty("sslmode", "verify-ca");
try {
Class.forName("org.postgresql.Driver");
Connection connection = DriverManager.getConnection(jdbcUrl, properties);
// Example: query all rows from the students01 table
PreparedStatement preparedStatement = connection.prepareStatement("select * from students01");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
ResultSetMetaData rsmd = resultSet.getMetaData();
int columnCount = rsmd.getColumnCount();
Map map = new HashMap();
for (int i = 0; i < columnCount; i++) {
map.put(rsmd.getColumnName(i + 1).toLowerCase(), resultSet.getObject(i + 1));
}
System.out.println(map);
}
} catch (Exception exception) {
exception.printStackTrace();
}
}
}