更新應用程式使用新的 SSL/TLS 憑證來連線至 PostgreSQL 資料庫執行個體 - Amazon Relational Database Service

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

更新應用程式使用新的 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-caverify-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-caverify-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。