Utilizzo del protocollo SSL con un'istanza database PostgreSQL - Amazon Relational Database Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo del protocollo SSL con un'istanza database PostgreSQL

Amazon RDS supporta la crittografia SSL per le istanze database di PostgreSQL. Utilizzando SSL, puoi crittografare una connessione PostgreSQL tra le tue applicazioni e le tue istanze database PostgreSQL. Per impostazione di default, RDS for PostgreSQL utilizza e prevede che tutti i client si connettano utilizzando SSL/TLS, ma puoi anche renderlo obbligatorio. RDS per PostgreSQL supporta le versioni Transport Layer Security (TLS) 1.1, 1.2 e 1.3.

Per informazioni generali sul supporto SSL e sui database PostgreSQL, consulta l'argomento relativo al supporto SSL nella documentazione di PostgreSQL. Per informazioni sull'utilizzo della connessione SSL in JDBC, consulta l'argomento relativo alla configurazione del client nella documentazione di PostgreSQL.

Il supporto SSL è disponibile in tutte le AWS regioni per PostgreSQL. Amazon RDS crea un certificato SSL per l'istanza database PostgreSQL al momento della creazione dell'istanza. Se abiliti la verifica del certificato SSL, il certificato SSL include l'endpoint dell'istanza database come nome comune (CN) per il certificato SSL per la protezione contro attacchi di spoofing.

Connessione a un'istanza database PostgreSQL tramite SSL

Per effettuare la connessione a un'istanza database PostgreSQL tramite SSL
  1. Scaricare il certificato.

    Per ulteriori informazioni sul download dei certificati, consultare .

  2. Effettuare la connessione a un'istanza database PostgreSQL tramite SSL.

    Quando ti connetti tramite SSL, il tuo client può scegliere di verificare o meno la catena di certificati. Se i parametri di connessione specificano sslmode=verify-ca o sslmode=verify-full, il client richiede che i certificati CA RDS siano nell'archivio attendibilità o facciano riferimento all'URL della connessione. Questo requisito è verificare la catena di certificati che firma il certificato del database.

    Quando un client, come psql o JDBC, è configurato con il supporto SSL, per impostazione predefinita tenta innanzitutto di connettersi al database con SSL. Se il client non riesce a connettersi con SSL, torna a connettersi senza SSL. La modalità predefinita sslmode utilizzata per i client basati su libpq (come psql) è diversa da quella per JDBC. I client basati su libpq e JDBC sono predefiniti su. prefer

    Utilizzare il parametro sslrootcert come riferimento per il certificato, ad esempio sslrootcert=rds-ssl-ca-cert.pem.

Di seguito è riportato un esempio di utilizzo di psql per connettersi a un'istanza database PostgreSQL tramite SSL con verifica del certificato.

$ 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"

Richiesta di una connessione SSL a un'istanza database PostgreSQL

Puoi richiedere che le connessioni alla tua istanza database PostgreSQL utilizzino SSL adoperando il parametro rds.force_ssl. Il valore predefinito del rds.force_ssl parametro è 1 (attivo) per RDS per PostgreSQL versione 15 e successive. Per tutte le altre versioni principali di RDS per PostgreSQL 14 e precedenti, il valore predefinito di questo parametro è 0 (disattivato). Puoi impostare il parametro rds.force_ssl su 1 (attivato) per richiedere la crittografia SSL/TLS per le connessioni al tuo cluster DB. Puoi impostare il parametro rds.force_ssl su 1 (on) per richiedere la crittografia SSL per le connessioni alla tua istanza database.

Per modificare il valore di questo parametro, devi creare un gruppo parametri del database personalizzato. Quindi modifica il valore di rds.force_ssl nel gruppo parametri del database personalizzato su 1 per attivare questa caratteristica. Se prepari il gruppo parametri del database personalizzato prima di creare l'istanza database RDS for PostgreSQL, puoi sceglierlo (invece del gruppo di parametri di default) durante il processo di creazione. Se esegui questa operazione quando l'istanza database RDS for PostgreSQL è in esecuzione, devi riavviare l'istanza in modo che utilizzi il gruppo di parametri personalizzati. Per ulteriori informazioni, consulta Gruppi di parametri per RDS.

Quando la caratteristica rds.force_ssl è attiva sull'istanza database, i tentativi di connessione che non utilizzano SSL vengono rifiutati con il seguente messaggio:

$ 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

Determinazione dello stato di connessione SSL

Lo stato crittografato della tua connessione è indicato nel banner di accesso quando ti connetti all'istanza database:

Password for user master: psql (10.3) SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) Type "help" for help. postgres=>

Puoi anche caricare l'estensione sslinfo e quindi richiamare la funzione ssl_is_used() per determinare se viene utilizzata la crittografia SSL. La funzione restituisce t se la connessione utilizza la crittografia SSL, altrimenti restituisce f.

postgres=> CREATE EXTENSION sslinfo; CREATE EXTENSION postgres=> SELECT ssl_is_used(); ssl_is_used --------- t (1 row)

Per informazioni dettagliate, puoi utilizzare la seguente query per ottenere informazioni da pg_settings:

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)

Puoi anche raccogliere tutte le informazioni sull'utilizzo SSL dell'istanza database RDS for PostgreSQL per processo, client e applicazione utilizzando la query seguente:

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)

Per identificare la cifra utilizzata per la tua connessione SSL, puoi eseguire la seguente query:

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

Per ulteriori informazioni sull'opzione sslmode, consulta Database connection control functions nella documentazione di PostgreSQL.

Suite di crittografie SSL in RDS per PostgreSQL

Il parametro di configurazione PostgreSQL ssl_ciphers specifica le categorie di suite di crittografia consentite per le connessioni SSL al database quando si utilizza TLS 1.2 e versioni precedenti.

In RDS for PostgreSQL 16 e versioni successive, è possibile modificare il parametro per utilizzare valori specifici ssl_ciphers delle suite di crittografia consentite. Si tratta di un parametro dinamico che non richiede il riavvio dell'istanza del database. Per visualizzare le suite di crittografia consentite, utilizza la console Amazon RDS o il seguente comando CLI: AWS

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")'

La tabella seguente elenca sia le suite di crittografia predefinite che le suite di crittografia consentite per le versioni che supportano configurazioni personalizzate.

Versione del motore PostgreSQL Valori predefiniti della suite ssl_cipher Valori della suite ssl_cipher personalizzati consentiti
17 HIGH:!aNULL:!3DES

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

16 HIGH:!aNULL:!3DES

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

15 HIGH:!aNULL:!3DES

I ssl_ciphers personalizzati non sono supportati

14 HIGH:!aNULL:!3DES

I ssl_ciphers personalizzati non sono supportati

13 HIGH:!aNULL:!3DES

I ssl_ciphers personalizzati non sono supportati

12 HIGH:!aNULL:!3DES

I ssl_ciphers personalizzati non sono supportati

Versioni secondarie 11.4 e successive HIGH:MEDIUM:+3DES:!aNULL:!RC4

I ssl_ciphers personalizzati non sono supportati

11.1, 11.2 HIGH:MEDIUM:+3DES:!aNULL

I ssl_ciphers personalizzati non sono supportati

Versioni secondarie 10.9 e successive HIGH:MEDIUM:+3DES:!aNULL:!RC4

I ssl_ciphers personalizzati non sono supportati

Versioni secondarie 10.7 e precedenti HIGH:MEDIUM:+3DES:!aNULL

I ssl_ciphers personalizzati non sono supportati

Per configurare tutte le connessioni di istanza per l'utilizzo della suite di TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 crittografia, modifica il gruppo di parametri come mostrato nell'esempio seguente:

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"

Questo esempio utilizza un codice ECDSA, che richiede all'istanza di utilizzare un'autorità di certificazione con crittografia a curva ellittica (ECC) per stabilire una connessione. Per informazioni sulle autorità di certificazione fornite da Amazon RDS, consulta Autorità di certificazione.

Puoi verificare i codici in uso tramite i metodi descritti in Determinazione dello stato della connessione SSL.

I cifrari possono avere nomi diversi a seconda del contesto:

  • I codici consentiti che è possibile configurare nel gruppo di parametri sono indicati con i rispettivi nomi IANA.

  • Il banner sslinfo and psql logon fa riferimento ai cifrari che utilizzano i rispettivi nomi OpenSSL.

Per impostazione predefinita, il valore di ssl_max_protocol_version in RDS per PostgreSQL 16 e versioni successive è TLS v1.3. È necessario impostare il valore di questo parametro su TLS v1.2 poiché TLS v1.3 non utilizza le configurazioni di cifratura specificate nel parametro. ssl_ciphers Quando impostate il valore come TLS v1.2, le connessioni utilizzano solo i codici definiti in. ssl_ciphers

aws rds modify-db-parameter-group --db-parameter-group-name <your-parameter-group> --parameters "ParameterName='ssl_max_protocol_version',ParameterValue='TLSv1.2',ApplyMethod=immediate"

Per garantire che le connessioni al database utilizzino SSL, imposta su 1 nel gruppo rds.force_ssl parameter di parametri. Per ulteriori informazioni sui parametri e sui gruppi di parametri, consulta Parameter groups for Amazon RDS.