

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

# 將應用程式更新為使用新的 SSL/TLS 憑證來連線至 Aurora PostgreSQL 資料庫叢集
<a name="ssl-certificate-rotation-aurora-postgresql"></a>

自 2023 年 1 月 13 日起，Amazon RDS 已發佈新的憑證認證機構 (CA) 憑證，使用 Secure Socket Layer 或 Transport Layer Security (SSL/TLS) 來連線至 Aurora 資料庫叢集。接下來，您可以找到更新應用程式使用新憑證的相關資訊。

本主題可協助您判斷任何用戶端應用程式是否使用 SSL/TLS 連線至您的資料庫叢集。若是如此，您可以進一步檢查那些應用程式是否需要驗證憑證才能連線。

**注意**  
有些應用程式設定為只有在成功驗證伺服器上的憑證時，才能連線至 Aurora PostgreSQL 資料庫叢集。  
對於這些應用程式，您必須更新用戶端應用程式信任存放區來包含新的 CA 憑證。

更新用戶端應用程式信任存放區中的 CA 憑證之後，您就可以在資料庫叢集輪換憑證。強烈建議先在開發或預備環境中測試這些步驟，再於生產環境中實作。

如需憑證輪換的詳細資訊，請參閱[輪換您的 SSL/TLS 憑證](UsingWithRDS.SSL-certificate-rotation.md)。如需下載憑證的詳細資訊，請參閱[使用 SSL/TLS 加密與資料庫叢集的連線](UsingWithRDS.SSL.md)。如需對 PostgreSQL 資料庫叢集使用 SSL/TLS 的資訊，請參閱[使用 SSL/TLS 保護 Aurora PostgreSQL 資料的安全](AuroraPostgreSQL.Security.md#AuroraPostgreSQL.Security.SSL)。

**Topics**
+ [

## 判斷任何應用程式是否使用 SSL 連線至 Aurora PostgreSQL 資料庫叢集
](#ssl-certificate-rotation-aurora-postgresql.determining-server)
+ [

## 判斷用戶端是否需要驗證憑證才能連線
](#ssl-certificate-rotation-aurora-postgresql.determining-client)
+ [

## 更新應用程式信任存放區
](#ssl-certificate-rotation-aurora-postgresql.updating-trust-store)
+ [

## 針對不同類型的應用程式使用 SSL/TLS 連線
](#ssl-certificate-rotation-aurora-postgresql.applications)

## 判斷任何應用程式是否使用 SSL 連線至 Aurora PostgreSQL 資料庫叢集
<a name="ssl-certificate-rotation-aurora-postgresql.determining-server"></a>

在資料庫叢集組態中檢查 `rds.force_ssl` 參數的值。依預設，`rds.force_ssl` 參數設為 `0` (關閉)。如果 `rds.force_ssl` 參數設為 `1` (開啟)，則用戶端需要使用 SSL/TLS 進行連線。如需參數群組的詳細資訊，請參閱[Amazon Aurora 的參數群組](USER_WorkingWithParamGroups.md)。

如果 `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 連線可能在不同時間建立。

## 判斷用戶端是否需要驗證憑證才能連線
<a name="ssl-certificate-rotation-aurora-postgresql.determining-client"></a>

當用戶端 (例如 psql 或 JDBC) 設有 SSL 支援時，依預設，用戶端會先嘗試以 SSL 連線至資料庫。如果用戶端無法以 SSL 連線，則回復為不以 SSL 來連線。用於 libpq 型用戶端 (例如 psql) 與 JDBC 的預設 `sslmode` 模式設定為 `prefer`。只有當提供 `sslrootcert` 並搭配 `sslmode` 設為 `verify-ca` 或 `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 primaryuser -d postgres
```

使用 `sslrootcert` 引數搭配連線字串格式的 `sslmode` 來驗證憑證，而且 `sslmode` 設為 `verify-ca` 或 `verify-full`。

```
psql "host=pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com sslmode=verify-full sslrootcert=/full/path/ssl-cert.pem user=primaryuser dbname=postgres"
```

例如，在上述案例中，如果您使用無效根憑證，則在用戶端會看到類似以下的錯誤。

```
psql: SSL error: certificate verify failed
```

## 更新應用程式信任存放區
<a name="ssl-certificate-rotation-aurora-postgresql.updating-trust-store"></a>

如需為 PostgreSQL 應用程式更新信任存放區的資訊，請參閱 PostgreSQL 文件中的[使用 SSL 保護 TCP/IP 連線的安全](https://www.postgresql.org/docs/current/ssl-tcp.html)。

**注意**  
更新信任存放區時，除了新增憑證，您還可以保留舊憑證。

### 為 JDBC 更新應用程式信任存放區
<a name="ssl-certificate-rotation-aurora-postgresql.updating-trust-store.jdbc"></a>

您可以為使用 JDBC 建立 SSL/TLS 連線的應用程式更新信任存放區。

如需下載根憑證的資訊，請參閱 [使用 SSL/TLS 加密與資料庫叢集的連線](UsingWithRDS.SSL.md)。

如需匯入憑證的範例指令碼，請參閱 [將憑證匯入信任存放區的範例指令碼](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-sample-script)。

## 針對不同類型的應用程式使用 SSL/TLS 連線
<a name="ssl-certificate-rotation-aurora-postgresql.applications"></a>

以下提供針對不同類型的應用程式使用 SSL/TLS 連線的資訊：
+ **psql**

  以連線字串或環境變數指定選項，從命令列叫用此用戶端。若為 SSL/TLS 連線，相關選項為 `sslmode` (環境變數 `PGSSLMODE`)、`sslrootcert` (環境變數 `PGSSLROOTCERT`)。

  如需完整的選項清單，請參閱 PostgreSQL 文件中的[參數關鍵字](https://www.postgresql.org/docs/11/libpq-connect.html#LIBPQ-PARAMKEYWORDS)。如需完整的環境變數清單，請參閱 PostgreSQL 文件中的[環境變數](https://www.postgresql.org/docs/current/libpq-envars.html)。
+ **pgAdmin**

  這個以瀏覽器為基礎的用戶端是更方便連線至 PostgreSQL 資料庫的介面。

  如需設定連線的資訊，請參閱 [pgAdmin 文件](https://www.pgadmin.org/docs/pgadmin4/latest/server_dialog.html)。
+ **JDBC**

  JDBC 可讓 Java 應用程式連線至資料庫。

  如需使用 JDBC 連線至 PostgreSQL 資料庫的一般資訊，請參閱 PostgreSQL 文件中的[連線至資料庫](https://jdbc.postgresql.org/documentation/use/)。如需使用 SSL/TLS 來連線的資訊，請參閱 PostgreSQL 文件中的[設定用戶端](https://jdbc.postgresql.org/documentation/ssl/)。
+ **Python**

  常用來連線至 PostgreSQL 資料庫的 Python 程式庫是 `psycopg2`。

  如需使用 `psycopg2` 的資訊，請參閱 [psycopg2 文件](https://pypi.org/project/psycopg2/)。如需如何連線至 PostgreSQL 資料庫的簡短教學課程，請參閱 [Psycopg2 教學](https://wiki.postgresql.org/wiki/Psycopg2_Tutorial)。您可以在 [psycopg2 模組內容](https://www.psycopg.org/docs/module.html)中找到 connect 命令接受的選項的相關資訊。

**重要**  
在確定了資料庫連線使用 SSL/TLS 並已更新應用程式信任存放區之後，您可以將資料庫更新為使用 rds-ca-rsa2048-g1 憑證。如需說明，請參閱[透過修改資料庫執行個體來更新憑證授權機構憑證](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-updating)中的步驟 3。