ApsaraDB RDS for PostgreSQL prend en charge le chiffrement SSL avec des certificats gérés par Alibaba Cloud et des certificats personnalisés. Utilisez un certificat personnalisé lorsque vous devez contrôler l'autorité de certification (CA) ou protéger plusieurs endpoints avec des Subject Alternative Names (SANs).
Cette rubrique explique comment générer un certificat personnalisé à l'aide d'OpenSSL et le configurer sur votre instance RDS.
Prérequis
Avant de commencer, assurez-vous que :
Vous disposez d'une instance RDS exécutant PostgreSQL 10 ou une version ultérieure avec des disques cloud. Les instances RDS Serverless ne sont pas prises en charge.
OpenSSL est installé. Linux inclut OpenSSL par défaut. Sous Windows, téléchargez et installez-le depuis la page Win32/Win64 OpenSSL.
Notes d'utilisation
L'activation du chiffrement SSL augmente l'utilisation du CPU et les latences en lecture/écriture.
Après avoir activé le chiffrement SSL, fermez les connexions existantes et établissez-en de nouvelles pour que la modification prenne effet.
-
Les opérations suivantes déclenchent un redémarrage de l'instance RDS, qui dure environ 3 minutes. Effectuez-les pendant les heures creuses :
Configuration d'un certificat personnalisé
Modification d'un certificat personnalisé existant
Désactivation du chiffrement SSL
Étape 1 : Générer les fichiers de certificat
N'activez pas le chiffrement par mot de passe lors de la création d'une clé privée pour un certificat de serveur ou un certificat auto-signé. Les clés privées chiffrées par mot de passe empêchent l'activation du chiffrement SSL.
Les commandes suivantes utilisent CentOS comme exemple. Sous Windows, exécutez les mêmes commandes openssl, mais utilisez la fonction copier et un éditeur de texte au lieu de cp et vim.
Endpoint unique
Exécutez les trois commandes suivantes dans l'ordre :
# 1. Create a self-signed CA certificate and its private key
openssl req -new -x509 -days 365 -nodes -out server-ca.crt -keyout server-ca.key -subj "/CN=root-server-ca"
# 2. Create a certificate signing request (CSR) and private key for the server certificate
# Replace the CN value with the endpoint you want to protect
openssl req -new -nodes -text -out server.csr -keyout server.key -subj "/CN=pgm-bpxxxxx.pg.rds.aliyuncs.com"
# 3. Sign the CSR with the CA to produce the server certificate
openssl x509 -req -in server.csr -text -days 365 -CA server-ca.crt -CAkey server-ca.key -CAcreateserial -out server.crt
Pour trouver l'endpoint à utiliser dans la valeur CN, consultez Afficher et modifier les endpoints et les numéros de port d'une instance ApsaraDB RDS for PostgreSQL.
Plusieurs endpoints (Subject Alternative Names)
Pour protéger plusieurs endpoints, incluez-les en tant que Subject Alternative Names (SANs) dans le certificat.
# 1. Create a self-signed CA certificate and its private key
openssl req -new -x509 -days 365 -nodes -out server-ca.crt -keyout server-ca.key -subj "/CN=root-server-ca"
# 2. Copy the default OpenSSL config to a temp file
cp /etc/pki/tls/openssl.cnf /tmp/openssl.cnf
Sous Windows, le fichieropenssl.cnfse trouve dans le répertoire\bin\cnfsous le dossier d'installation d'OpenSSL. Copiez-le dans n'importe quel répertoire de votre choix.
Ouvrez /tmp/openssl.cnf dans un éditeur de texte et ajoutez le contenu suivant :
# Add to the end of the [ req ] section
req_extensions = v3_req
# Add a new [ v3_req ] section
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
# Add a new [ alt_names ] section — list each endpoint as a DNS entry
[ alt_names ]
DNS.1 = pgm-bpxxxxx.pg.rds.aliyuncs.com
DNS.2 = pgm-bpyyyyy.pg.rds.aliyuncs.com
Ensuite, générez la demande de signature de certificat (CSR) et le certificat de serveur :
# 3. Create a CSR and server private key using the updated config
openssl req -new -nodes -text -out server.csr -keyout server.key -config /tmp/openssl.cnf
# 4. Sign the CSR with the CA, including the SAN extensions
openssl x509 -req -in server.csr -text -days 365 -CA server-ca.crt -CAkey server-ca.key -CAcreateserial -out server.crt -extensions v3_req -extfile /tmp/openssl.cnf
Lorsque vous exécutez l'étape 3, OpenSSL vous demande les paramètres de la CSR. Le tableau suivant décrit chaque champ.
| Paramètre | Description | Exemple |
|---|---|---|
| Country Name | Code pays ISO 3166 à deux lettres | CN |
| State or Province Name | Province ou État | ZheJiang |
| Locality Name | Ville | HangZhou |
| Organization Name | Nom de l'entreprise | Alibaba |
| Organizational Unit Name | Nom du département | Aliyun |
| Common Name | Laissez vide — les noms de domaine sont spécifiés dans openssl.cnf |
— |
| Email Address | Laissez vide | — |
| A challenge password | Laissez vide | — |
| An optional company name | Laissez vide | — |
Vérifier la sortie
Une fois les commandes terminées, exécutez ls pour confirmer que tous les fichiers requis sont présents :
server-ca.crt server-ca.key ca.srl server.crt server.csr server.key
Le tableau suivant décrit chaque fichier et son rôle dans le protocole SSL :
| Fichier | Contenu | Objectif |
|---|---|---|
server.crt |
Certificat de serveur | Envoyé aux clients pour identifier le serveur |
server.key |
Clé privée du certificat de serveur | Prouve que le serveur possède le certificat |
server-ca.crt |
Certificat CA auto-signé | Utilisé par les clients pour vérifier le certificat de serveur |
server-ca.key |
Clé privée du certificat CA | Utilisée pour signer le certificat de serveur |
Étape 2 : Activer le chiffrement SSL avec le certificat personnalisé
Après avoir configuré un certificat personnalisé, le statut de l'instance passe de RunningRunning à Modifying SSLModifying SSL puis revient à RunningRunning en environ 3 minutes.
Accédez à la page Instances. Dans la barre de navigation supérieure, sélectionnez la région où réside votre instance. Cliquez sur l'ID de l'instance.
Dans le volet de navigation de gauche, cliquez sur Data SecurityData Security. Sur la page qui s'affiche, cliquez sur l'onglet SSLSSL.
Définissez Select Certificate SourceSelect Certificate Source sur Custom CertificateCustom Certificate. Cliquez sur ConfigurationConfiguration à côté de Configure Database Certificate (to Prevent Database Disguise)Configure Database Certificate (to Prevent Database Disguise).
-
Dans la boîte de dialogue, collez le contenu des fichiers dans les champs correspondants. Copiez l'intégralité du contenu de chaque fichier, y compris les lignes d'en-tête et de pied de page. Cliquez sur OKOK. Si votre certificat couvre plusieurs endpoints, chaque endpoint apparaît comme un enregistrement distinct dans Protected HostProtected Host.
Champ Fichier Plage de contenu Server CertificateServer Certificate server.crtDe -----BEGIN CERTIFICATE-----à-----END CERTIFICATE-----Private Key of Server CertificatePrivate Key of Server Certificate server.keyDe -----BEGIN PRIVATE KEY-----à-----END PRIVATE KEY-----



Étape 3 : Se connecter à l'instance via SSL
Vous pouvez vous connecter à l'instance RDS depuis un client via SSL. Pour plus d'informations, consultez Se connecter à une instance ApsaraDB RDS for PostgreSQL via SSL.
Étape 4 : (Facultatif) Mettre à jour le certificat personnalisé
Cette opération déclenche un redémarrage de l'instance RDS. Procédez avec prudence.
Sur l'onglet SSLSSL, cliquez sur ModifyModify à côté de Configure Database Certificate (to Prevent Database Disguise)Configure Database Certificate (to Prevent Database Disguise). Dans la boîte de dialogue, saisissez le nouveau certificat de serveur et sa clé privée.


Étape 5 : (Facultatif) Désactiver le chiffrement SSL
Cette opération déclenche un redémarrage de l'instance RDS. Procédez avec prudence.
Sur l'onglet SSLSSL, cliquez sur Disable SSLDisable SSL.


FAQ
Pourquoi l'erreur « The certificate address does not contain the instance connection string » s'affiche-t-elle ?
Le CN (Common Name) ou le SAN (Subject Alternative Name) du certificat ne contient pas l'endpoint de l'instance RDS. Les certificats génériques (par exemple, *.example.com) ne sont pas pris en charge.
Pour résoudre ce problème, régénérez le certificat et définissez la valeur CN ou une entrée SAN sur l'endpoint complet de l'instance RDS (par exemple, pgm-xxx.pg.rds.aliyuncs.com). Pour savoir comment afficher l'endpoint, consultez Afficher et modifier les endpoints et les numéros de port d'une instance ApsaraDB RDS for PostgreSQL.
Pourquoi la configuration SSL échoue-t-elle avec une erreur de clé privée ?
La clé privée a été générée avec un chiffrement par mot de passe. Les clés privées chiffrées par mot de passe ne sont pas prises en charge.
Pour résoudre ce problème, régénérez la clé privée sans chiffrement par mot de passe. Utilisez l'indicateur -nodes dans la commande openssl req, comme indiqué à l'étape 1. Le fichier de clé privée doit commencer par -----BEGIN PRIVATE KEY-----.
Pourquoi une erreur de format de certificat s'affiche-t-elle lors du téléchargement du certificat ?
Le fichier de certificat peut ne pas être au format PEM ou contenir du contenu supplémentaire.
Pour résoudre ce problème, assurez-vous de télécharger un fichier de certificat au format PEM. Le contenu doit commencer par -----BEGIN CERTIFICATE----- et se terminer par -----END CERTIFICATE-----, sans texte supplémentaire en dehors de ces lignes.