本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
更新應用程式使用新的 SSL/TLS 憑證來連線至 PostgreSQL 資料庫執行個體
用於 Secure Socket Layer 或 Transport Layer Security (SSL/TLS) 的憑證通常具有設定生命週期。當服務供應商更新其憑證授權機構 (CA) 憑證時,用戶端必須更新其應用程式以使用新憑證。您可以在下文找到相關資訊,了解如何判斷用戶端應用程式是否使用 SSL/TLS 連線至 Amazon RDS for PostgreSQL 資料庫執行個體。您還可以找到如何檢查這些應用程式在連線時是否驗證伺服器憑證的相關資訊。
注意
設定為在 SSL/TLS 連線之前驗證伺服器憑證的用戶端應用程式,必須在用戶端的信任存放區中具有有效的 CA 憑證。在需要時更新用戶端信任存放區以取得新憑證。
更新用戶端應用程式信任存放區中的 CA 憑證之後,您就可以在資料庫執行個體輪換憑證。強烈建議先在非生產環境中測試這些步驟,再於生產環境中實作。
如需憑證輪換的詳細資訊,請參閱輪換您的 SSL/TLS 憑證。如需下載憑證的詳細資訊,請參閱。如需對 PostgreSQL 資料庫執行個體使用 SSL/TLS 的資訊,請參閱將 SSL 與 PostgreSQL 資料庫執行個體搭配使用。
判斷任何應用程式是否使用 SSL 連線至 PostgreSQL 資料庫執行個體
在資料庫執行個體組態中檢查 rds.force_ssl
參數的值。對於使用 PostgreSQL 版本 15 之前版本的資料庫執行個體,rds.force_ssl
參數預設會設定為 0
(關閉)。對於使用 PostgreSQL 版本 15 及更新主要版本的資料庫執行個體,rds.force_ssl
預設會設定為 1
(開啟)。如果 rds.force_ssl
參數設為 1
(開啟),則用戶端需要使用 SSL/TLS 進行連線。如需參數群組的詳細資訊,請參閱使用參數群組。
如果您使用 RDS PostgreSQL 9.5 版或更新的主要版本,而 rds.force_ssl
未設為 1
(開啟),請查詢 pg_stat_ssl
檢視,以檢查使用 SSL 的連線。例如,下列查詢只傳回 SSL 連線和關於使用 SSL 的用戶端的資訊。
SELECT datname, usename, ssl, client_addr FROM pg_stat_ssl INNER JOIN pg_stat_activity ON pg_stat_ssl.pid = pg_stat_activity.pid WHERE ssl is true and usename<>'rdsadmin';
只有使用 SSL/TLS 連線的列才會顯示連線的相關資訊。下列為範例輸出。
datname | usename | ssl | client_addr
----------+---------+-----+-------------
benchdb | pgadmin | t | 53.95.6.13
postgres | pgadmin | t | 53.95.6.13
(2 rows)
此查詢只顯示查詢當時的連線。沒有結果不代表沒有應用程式使用 SSL 連線。其他 SSL 連線可能在不同時間建立。
判斷用戶端是否需要驗證憑證才能連線
當用戶端 (例如 psql 或 JDBC) 設有 SSL 支援時,依預設,用戶端會先嘗試以 SSL 連線至資料庫。如果用戶端無法以 SSL 連線,則回復為不以 SSL 來連線。以 libpq 為基礎的用戶端 (例如 psql) 和 JDBC 使用的預設 sslmode
模式不同。以 libpq 為基礎的用戶端預設使用 prefer
,而 JDBC 用戶端預設使用 verify-full
。只有在提供sslmode
設為verify-ca
或時,才會sslrootcert
驗證伺服器上的憑證verify-full
。如果憑證無效,則擲出錯誤。
用於PGSSLROOTCERT
使用PGSSLMODE
環境變數驗證憑證,並將其PGSSLMODE
設定為verify-ca
或verify-full
。
PGSSLMODE=verify-full PGSSLROOTCERT=/fullpath/
ssl-cert.pem
psql -h pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com -U masteruser -d postgres
使用sslrootcert
引數以連接字串格式驗證憑證,並sslmode
設定為verify-ca
或verify-full
來驗證憑證。sslmode
psql "host=pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com sslmode=verify-full sslrootcert=/full/path/
ssl-cert.pem
user=masteruser dbname=postgres"
例如,在上述案例中,如果您使用無效根憑證,則在用戶端會看到類似以下的錯誤。
psql: SSL error: certificate verify failed
更新應用程式信任存放區
如需為 PostgreSQL 應用程式更新信任存放區的資訊,請參閱 PostgreSQL 文件中的使用 SSL 保護 TCP/IP 連線的安全
如需匯入憑證的範例指令碼,請參閱 將憑證匯入信任存放區的範例指令碼。
注意
更新信任存放區時,除了新增憑證,您還可以保留舊憑證。
針對不同類型的應用程式使用 SSL/TLS 連線
以下提供針對不同類型的應用程式使用 SSL/TLS 連線的資訊:
-
psql
以連線字串或環境變數指定選項,從命令列叫用此用戶端。若為 SSL/TLS 連線,相關選項為
sslmode
(環境變數PGSSLMODE
)、sslrootcert
(環境變數PGSSLROOTCERT
)。如需完整的選項清單,請參閱 PostgreSQL 文件中的參數關鍵字
。如需完整的環境變數清單,請參閱 PostgreSQL 文件中的環境變數 。 -
pgAdmin
這個以瀏覽器為基礎的用戶端是更方便連線至 PostgreSQL 資料庫的介面。
如需設定連線的資訊,請參閱 pgAdmin 文件
。 -
JDBC
JDBC 可讓 Java 應用程式連線至資料庫。
如需使用 JDBC 連線至 PostgreSQL 資料庫的一般資訊,請參閱 PostgreSQL JDBC 驅動程式文件中的連線至資料庫
。如需使用 SSL/TLS 來連線的資訊,請參閱 PostgreSQL JDBC 驅動程式文件中的設定用戶端 。 -
Python
常用來連線至 PostgreSQL 資料庫的 Python 程式庫是
psycopg2
。如需使用
psycopg2
的資訊,請參閱 psycopg2 文件。如需如何連線至 PostgreSQL 資料庫的簡短教學課程,請參閱 Psycopg2 教學 。您可以在 psycopg2 模組內容 中找到 connect 命令接受的選項的相關資訊。
重要
判斷資料庫連線使用 SSL/TLS 並更新應用程式信任存放區之後,您可以更新資料庫以使用 rds-ca-rsa 2048-g1 憑證。如需說明,請參閱透過修改資料庫執行個體或叢集來更新 CA 憑證中的步驟 3。