

# 为 Aurora DSQL 连接配置 SSL/TLS 证书
<a name="configure-root-certificates"></a><a name="ssl-certificate-overview"></a>

Aurora DSQL 要求所有连接均使用传输层安全性协议（TLS）加密。要建立安全连接，客户端系统必须信任 Amazon 根证书颁发机构（Amazon Root CA 1）。此证书预安装在许多操作系统上。本节提供在各种操作系统上验证预安装的 Amazon Root CA 1 证书的说明，并指导您完成手动安装证书的过程（如果证书尚不存在）。

建议使用 PostgreSQL 版本 17。

**重要**  
对于生产环境，建议使用 `verify-full` SSL 模式，以确保最高级别的连接安全性。此模式验证服务器证书是否由受信任的证书颁发机构签名，以及服务器主机名是否与证书匹配。

## 验证预安装证书
<a name="verify-installed-certificates"></a>

在大多数操作系统中，已经预安装了 **Amazon Root CA 1**。要验证这一点，您可以按照以下步骤操作。

### Linux（RedHat/CentOS/Fedora）
<a name="verify-linux"></a>

在终端中运行以下命令：

```
trust list | grep "Amazon Root CA 1"
```

如果证书已安装，将显示以下输出：

```
label: Amazon Root CA 1
```

### macOS
<a name="verify-macos"></a>

1. 打开 Spotlight 搜索（**Command** \+ **空格**）

1. 搜索 **Keychain Access**

1. 在**系统密钥链**下选择**系统根**

1. 在证书列表中查找 **Amazon Root CA 1**

### Windows
<a name="verify-windows"></a>

**注意**  
由于 psql Windows 客户端存在一个已知问题，因此使用系统根证书 (`sslrootcert=system`) 可能会返回以下错误：`SSL error: unregistered scheme`。您可以采用[从 Windows 进行连接](#connect-windows)作为使用 SSL 连接到集群的替代方法。

如果操作系统中未安装 **Amazon Root CA 1**，请按照以下步骤操作。

## 安装证书
<a name="install-certificates"></a>

 如果操作系统上未预安装 `Amazon Root CA 1` 证书，则需要手动安装该证书，以便与 Aurora DSQL 集群建立安全连接。

### Linux 证书安装
<a name="install-linux"></a>

按照以下步骤在 Linux 系统上安装 Amazon 根 CA 证书。

1. 下载根证书：

   ```
   wget https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

1. 将证书复制到信任存储：

   ```
   sudo cp ./AmazonRootCA1.pem /etc/pki/ca-trust/source/anchors/
   ```

1. 更新 CA 信任存储：

   ```
   sudo update-ca-trust
   ```

1. 验证安装：

   ```
   trust list | grep "Amazon Root CA 1"
   ```

### macOS 证书安装
<a name="install-macos"></a>

这些证书安装步骤是可选的。[Linux 证书安装](#install-linux)也适用于 macOS。

1. 下载根证书：

   ```
   wget https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

1. 将证书添加到系统密钥链：

   ```
   sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain AmazonRootCA1.pem
   ```

1. 验证安装：

   ```
   security find-certificate -a -c "Amazon Root CA 1" -p /Library/Keychains/System.keychain
   ```

## 使用 SSL/TLS 验证进行连接
<a name="connect-using-certificates"></a>

 在配置 SSL/TLS 证书以便与 Aurora DSQL 集群建立安全连接之前，请确保满足以下先决条件。
+ 已安装 PostgreSQL 版本 17
+ 使用适当的凭证配置了 AWS CLI
+ Aurora DSQL 集群端点信息

### 从 Linux 进行连接
<a name="connect-linux"></a>

1. 生成并设置身份验证令牌：

   ```
   export PGPASSWORD=$(aws dsql generate-db-connect-admin-auth-token --region={{your-cluster-region}} --hostname {{your-cluster-endpoint}})
   ```

1. 使用系统证书（如果已预安装）进行连接：

   ```
   PGSSLROOTCERT=system \
   PGSSLMODE=verify-full \
   psql --dbname postgres \
   --username admin \
   --host {{your-cluster-endpoint}}
   ```

1. 或者，使用下载的证书进行连接：

   ```
   PGSSLROOTCERT=/full/path/to/root.pem \
   PGSSLMODE=verify-full \
   psql --dbname postgres \
   --username admin \
   --host {{your-cluster-endpoint}}
   ```

**注意**  
 有关 PGSSLMODE 设置的更多信息，请参阅 PostgresQL 17 [Database Connection Control Functions](https://www.postgresql.org/docs/current/libpq-connect.html) 文档中的 [sslmode](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLMODE)。

### 从 macOS 进行连接
<a name="connect-macos"></a>

1. 生成并设置身份验证令牌：

   ```
   export PGPASSWORD=$(aws dsql generate-db-connect-admin-auth-token --region={{your-cluster-region}} --hostname {{your-cluster-endpoint}})
   ```

1. 使用系统证书（如果已预安装）进行连接：

   ```
   PGSSLROOTCERT=system \
   PGSSLMODE=verify-full \
   psql --dbname postgres \
   --username admin \
   --host {{your-cluster-endpoint}}
   ```

1. 或者，下载根证书并将其另存为 `root.pem`（如果未预安装证书）

   ```
   PGSSLROOTCERT=/full/path/to/root.pem \
   PGSSLMODE=verify-full \
   psql —dbname postgres \
   --username admin \
   --host your_cluster_endpoint
   ```

1. 使用 psql 进行连接：

   ```
   PGSSLROOTCERT=/full/path/to/root.pem \
   PGSSLMODE=verify-full \
   psql —dbname postgres \
   --username admin \
   --host your_cluster_endpoint
   ```

### 从 Windows 进行连接
<a name="connect-windows"></a>

#### 使用命令提示符
<a name="windows-command-prompt"></a>

1. 生成身份验证令牌：

   ```
   aws dsql generate-db-connect-admin-auth-token ^
   --region={{your-cluster-region}} ^
   --expires-in=3600 ^
   --hostname={{your-cluster-endpoint}}
   ```

1. 设置密码环境变量：

   ```
   set "PGPASSWORD={{token-from-above}}"
   ```

1. 设置 SSL 配置：

   ```
   set PGSSLROOTCERT=C:\full\path\to\root.pem
   set PGSSLMODE=verify-full
   ```

1. 连接到数据库：

   ```
   "C:\Program Files\PostgreSQL\17\bin\psql.exe" --dbname postgres ^
   --username admin ^
   --host {{your-cluster-endpoint}}
   ```

#### 使用 PowerShell
<a name="windows-powershell"></a>

1. 生成并设置身份验证令牌：

   ```
   $env:PGPASSWORD = (aws dsql generate-db-connect-admin-auth-token --region={{your-cluster-region}} --expires-in=3600 --hostname={{your-cluster-endpoint}})
   ```

1. 设置 SSL 配置：

   ```
   $env:PGSSLROOTCERT='C:\full\path\to\root.pem'
   $env:PGSSLMODE='verify-full'
   ```

1. 连接到数据库：

   ```
    "C:\Program Files\PostgreSQL\17\bin\psql.exe" --dbname postgres `
   --username admin `
   --host {{your-cluster-endpoint}}
   ```

## 其他资源
<a name="additional-resources"></a>
+  [PostgreSQL SSL 文档](https://www.postgresql.org/docs/current/libpq-ssl.html) 
+  [Amazon Trust Services](https://www.amazontrust.com/repository/) 