SSL搭配使用後資SQL料庫執行個體 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

SSL搭配使用後資SQL料庫執行個體

Amazon RDS 支援 Postgre SQL 資料庫執行個體的安全通訊端層 (SSL) 加密。使用時SSL,您可以加密應用程式和 Postgre SQL 資料庫執行個體之間的 Postgre SQL 連線。默認情況下,RDS對於 Postgre SQL 使用並期望所有客戶端使用SSL/進行連接TLS,但您也可以要求它。RDS對於波斯特格雷SQL支持傳輸層安全性(TLS)版本 1.1,1.2 和 1.3。

如需有關SSL支援和 Postgre 資SQL料庫的一般資訊,請參閱 Postgre 文SQL件中的SSL支援。如需使用透過SSL連線的相關資訊JDBC,請參閱 Postgre SQL 文件中的設定用戶端

SSL支持在所有 AWS 地區的 Postgre SQL。Amazon RDS 會在建立執行個體時為您的 Postgre SQL 資料庫執行個體建立SSL憑證。如果啟用SSL憑證驗證,則SSL憑證會包含資料庫執行個體端點作為SSL憑證的一般名稱 (CN),以防範詐騙攻擊。

透過連線至郵件SQL資料庫執行個體 SSL

若要透過以下方式連線至 Postgre SQL 資料庫執行 SSL
  1. 下載憑證。

    如需有關下載憑證的詳細資訊,請參閱使用SSL/TLS來加密資料庫執行個體或叢集集的連線

  2. 透過 Connect 至您的 Postgre SQL 資料庫執行個SSL體。

    當您使用連線時SSL,用戶端可以選擇是否要驗證憑證鏈結。如果您的連線參數指定sslmode=verify-casslmode=verify-full,則用戶端要求 RDS CA 憑證位於其信任存放區中或在連線中參照URL。此需求是為了驗證用於簽署資料庫憑證的憑證鏈。

    當客戶端(例如 psql 或JDBC)配置SSL支持時,客戶端首先嘗試默認連接到數據庫。SSL如果客戶端無法連接SSL,它將恢復為沒有SSL連接。基於 libpq 的客戶端(例如 psql)和之間使用的默認sslmode模式不同。JDBC以 libpq 為基礎的用戶端預設為prefer,且用JDBC戶端預設為。verify-full

    使用 sslrootcert 參數來參考憑證,例如 sslrootcert=rds-ssl-ca-cert.pem

以下是使用憑證驗證連線psql到 Postgre SQL 資料庫執行個體SSL的範例。

$ 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連線至 Postgre SQL 資料庫執行個體

您可以使用SSLrds.force_ssl參數要求使用 Postgre SQL 資料庫執行個體的連線。對於 Postgre SQL 版本 15 及更新版本,rds.force_ssl參數預設值RDS為 1 (開啟)。對RDS於 Postgre SQL 主要版本 14 及以上的所有其他版本,此參數的預設值為 0 (關閉)。您可以將rds.force_ssl參數設定為 1 (on),以便連接到資料庫叢集時需要SSL/TLS。您可以將rds.force_ssl參數設定為 1 (on),以便連線到資料庫執行個體時需要SSL。

如要變更此參數值,您需要建立自訂資料庫參數群組。然後,您可變更您自訂資料庫參數群組中的 rds.force_ssl 值為 1,以開啟此功能。如果您在建立 For Postgre 資料庫執行個體之前準備好自訂SQL資料庫參數群組,您可以在建立程序期間選擇它 (而非預設參數群組)。RDS如果您RDS在執行 For Postgre SQL 資料庫執行個體之後執行此動作,您必須重新啟動執行個體,讓執行個體使用自訂參數群組。如需詳細資訊,請參閱 的參數組 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還可以使用以下查詢,按流程,客戶端和應用程序收集有關 Postgre SQL DB 實例使用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此選項,請參閱 Postgre SQL 文件中的資料庫連線控制功能

SSL波斯特格雷RDS的密碼套件 SQL

Postgre SQL 配置參數 ssl_密碼指定連接允許的密碼套件的類別。SSL下表列出了 Post SQL gre 中RDS使用的默認密碼套件。

波斯特雷SQL引擎版本 密碼套件
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