本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
SSL 搭配 PostgreSQL 資料庫執行個體使用
Amazon RDS支援 PostgreSQL 資料庫執行個體的安全通訊端層 (SSL) 加密。您可以使用 SSL加密應用程式與 PostgreSQL 資料庫執行個體之間的 PostgreSQL 連線。根據預設,RDS對於 PostgreSQL, 會使用 並預期所有用戶端都會使用 SSL/ 進行連線TLS,但您也可以要求它。RDS for PostgreSQL 支援 Transport Layer Security (TLS) 1.1、1.2 和 1.3 版。
如需SSL支援和 PostgreSQL 資料庫的一般資訊,請參閱 PostgreSQL 文件中的SSL支援
SSL Postgre 的所有 AWS 區域都提供 支援SQL。RDS 建立執行個體時,Amazon 會為您的 PostgreSQL 資料庫執行個體建立SSL憑證。如果您啟用SSL憑證驗證,則SSL憑證會包含資料庫執行個體端點作為SSL憑證的通用名稱 (CN),以防止詐騙攻擊。
透過 連線至 PostgreSQL 資料庫執行個體 SSL
若要透過 連線至 PostgreSQL 資料庫執行個體 SSL
-
下載憑證。
如需有關下載憑證的詳細資訊,請參閱使用 SSL/TLS 加密與資料庫執行個體或叢集的連線。
-
透過 連線至 PostgreSQL 資料庫執行個體SSL。
當您使用 連線時SSL,用戶端可以選擇是否要驗證憑證鏈。如果您的連線參數指定
sslmode=verify-ca
或sslmode=verify-full
,則用戶端會要求 RDS CA 憑證位於其信任存放區中或在連線 中參考URL。此需求是為了驗證用於簽署資料庫憑證的憑證鏈。當 psql 或 等用戶端JDBC設定為SSL支援時,用戶端會SSL先嘗試使用 連線到資料庫。如果用戶端無法與 連線SSL,則會還原為沒有 的連線SSL。使用的預設
sslmode
模式在 libpq 型用戶端 (例如 psql) 和 之間不同JDBC。以 libpq 為基礎的用戶端預設為prefer
,而JDBC用戶端預設為verify-full
。使用
sslrootcert
參數來參考憑證,例如sslrootcert=rds-ssl-ca-cert.pem
。
以下是使用 psql
搭配SSL憑證驗證連線至 PostgreSQL 資料庫執行個體的範例。
$
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"
需要SSL連線至 PostgreSQL 資料庫執行個體
您可以使用 SSL rds.force_ssl
參數要求連線至 PostgreSQL 資料庫執行個體。RDS PostgreSQL 第 15 版及更新版本的rds.force_ssl
參數預設值為 1 (開啟)。對於 PostgreSQL 主要版本 14 及更舊版本的所有其他 RDS ,此參數的預設值為 0 (關閉)。您可以將 rds.force_ssl
參數設定為 1 (開啟),以要求 SSL/TLS 用於與資料庫叢集的連線。您可以將 rds.force_ssl
參數設定為 1 (開啟),以要求 與資料庫執行個體SSL的連線。
如要變更此參數值,您需要建立自訂資料庫參數群組。然後,您可變更您自訂資料庫參數群組中的 rds.force_ssl
值為 1
,以開啟此功能。如果您在建立 RDS for PostgreSQL 資料庫執行個體之前準備自訂資料庫參數群組,您可以在建立過程中選擇它 (而非預設參數群組)。如果您在 RDS for PostgreSQL 資料庫執行個體已執行之後執行此操作,則需要重新啟動執行個體,以便執行個體使用自訂參數群組。如需詳細資訊,請參閱 的參數組 RDS。
當您的資料庫執行個體上rds.force_ssl
啟用此功能時,未使用 的連線嘗試SSL會被拒絕,並顯示下列訊息:
$
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
判斷SSL連線狀態
當您連接至資料庫執行個體時,登入橫幅中會顯示連線的加密狀態:
Password for user master:
psql (10.3)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
postgres=>
您也可以載入sslinfo
擴充功能,然後呼叫 ssl_is_used()
函數來判斷SSL是否正在使用中。t
如果連線使用 ,則函數會傳回 SSL,否則會傳回 f
。
postgres=>
CREATE EXTENSION sslinfo;
CREATE EXTENSION
postgres=>
SELECT ssl_is_used();
ssl_is_used --------- t (1 row)
如需更多詳細資訊,您可使用下列查詢,從 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)
您也可以使用下列查詢,透過程序、用戶端和應用程式收集有關 RDS for PostgreSQL 資料庫執行個體SSL使用量的所有資訊:
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)
若要識別用於SSL連線的密碼,您可以依下列方式查詢:
postgres=>
SELECT ssl_cipher();
ssl_cipher -------------------- DHE-RSA-AES256-SHA (1 row)
若要進一步了解 sslmode
選項,請參閱 PostgreSQL 文件 中的資料庫連線控制函數
SSL RDS for Postgre 中的密碼套件SQL
PostgreSQL 組態參數 ssl_ciphers
PostgreSQL 引擎版本 | 密碼套件 |
---|---|
16 | HIGH:!aNULL:!3DES |
15 | HIGH:!aNULL:!3DES |
14 | HIGH:!aNULL:!3DES |
13 | HIGH:!aNULL:!3DES |
12 | HIGH:!aNULL:!3DES |
11.4 及更高次要版本 | HIGH:MEDIUM:+3DES:!aNULL:!RC4 |
11.1、11.2 | HIGH:MEDIUM:+3DES:!aNULL |
10.9 及更高次要版本 | HIGH:MEDIUM:+3DES:!aNULL:!RC4 |
10.7 及較低次要版本 | HIGH:MEDIUM:+3DES:!aNULL |