

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 相互认证 AWS Client VPN
<a name="mutual"></a>

借助双向身份验证，Client VPN 使用证书在客户端和服务器之间执行身份验证。证书是由证书颁发机构（CA）颁发的数字化身份。当客户端尝试连接到 Client VPN 端点时，服务器使用客户端证书对客户端进行身份验证。您必须创建服务器证书和密钥，以及至少一个客户端证书和密钥。

您必须将服务器证书上传到 AWS Certificate Manager (ACM)，并在创建 Client VPN 端点时指定该证书。将服务器证书上载到 ACM 时，还需要指定证书颁发机构 (CA)。如果客户端证书的 CA 与服务器证书的 CA 不同，您只需将客户端证书上传到 ACM。有关 ACM 的更多信息，请参阅 [AWS Certificate Manager 用户指南](https://docs.aws.amazon.com/acm/latest/userguide/)。

您可以为将连接到 Client VPN 端点的每个客户端创建单独的客户端证书和密钥。这使您能够在用户退出组织时撤销特定的客户端证书。在这种情况下，当您创建 Client VPN 端点时，可以为客户端证书指定服务器证书 ARN，前提是客户端证书与服务器证书是由相同 CA 颁发的。

AWS Client VPN 中使用的证书必须符合 [RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile](https://datatracker.ietf.org/doc/html/rfc5280) 中的规定，包括备忘录第 4.2 节中指定的证书扩展。

**注意**  
Client VPN 端点仅支持 1024 位和 2048 位 RSA 密钥大小。此外，客户端证书的“主题”字段中必须具有 CN 属性。  
更新 Client VPN 服务所用的证书（无论是通过 ACM 自动轮换、手动导入新证书还是更新 IAM Identity Center 元数据）时，Client VPN 服务将自动使用较新的证书更新 Client VPN 端点。这是一个自动化流程，最多可能需要 5 个小时。

**Topics**
+ [启用双向身份验证](client-auth-mutual-enable.md)
+ [续订您的服务器证书](mutual-renew.md)

# 启用双向认证 AWS Client VPN
<a name="client-auth-mutual-enable"></a>

你可以在 Windows Linux/MacOS 或 Windows 的 Client VPN 中启用双向身份验证。

------
#### [ Linux/macOS ]

以下过程使用 OpenVPN easy-rsa 生成服务器和客户端证书和密钥，然后将服务器证书和密钥上传到 ACM。有关更多信息，请参阅 [Easy-RSA 3 快速入门自述文件](https://github.com/OpenVPN/easy-rsa/blob/v3.0.6/README.quickstart.md)。

**生成服务器和客户端证书和密钥并将其上传到 ACM**

1. 将 OpenVPN easy-rsa 存储库克隆到本地计算机并导航到 `easy-rsa/easyrsa3` 文件夹。

   ```
   $ git clone https://github.com/OpenVPN/easy-rsa.git
   ```

   ```
   $ cd easy-rsa/easyrsa3
   ```

1. 初始化一个新的 PKI 环境。

   ```
   $ ./easyrsa init-pki
   ```

1. 要构建新的证书颁发机构（CA），请运行此命令并按照提示进行操作。

   ```
   $ ./easyrsa build-ca nopass
   ```

1. 生成服务器证书和密钥。

   ```
   $ ./easyrsa --san=DNS:server build-server-full server nopass
   ```

1. 生成客户端证书和密钥。

   请务必保存客户端证书和客户端私有密钥，因为您配置客户端时需要这些信息。

   ```
   $ ./easyrsa build-client-full client1.domain.tld nopass
   ```

   您可以选择为需要客户端证书和密钥的每个客户端（最终用户）重复此步骤。

1. 将服务器证书和密钥和客户端证书和密钥复制到自定义文件夹，然后导航到此自定义文件夹。

   复制证书和密钥之前，请使用 `mkdir` 命令创建自定义文件夹。以下示例在您的主目录中创建自定义文件夹。

   ```
   $ mkdir ~/custom_folder/
   $ cp pki/ca.crt ~/custom_folder/
   $ cp pki/issued/server.crt ~/custom_folder/
   $ cp pki/private/server.key ~/custom_folder/
   $ cp pki/issued/client1.domain.tld.crt ~/custom_folder
   $ cp pki/private/client1.domain.tld.key ~/custom_folder/
   $ cd ~/custom_folder/
   ```

1. 将服务器证书和密钥以及客户端证书和密钥上传到 ACM。请确保在您打算在其中创建客户端 VPN 终端节点的同一区域中上传证书。以下命令使用 AWS CLI 上传证书。要改为使用 ACM 控制台上传证书，请参阅 *AWS Certificate Manager 用户指南*中的[导入证书](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-api-cli.html)。

   ```
   $ aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt
   ```

   ```
   $ aws acm import-certificate --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt
   ```

   您不必将客户端证书上传到 ACM。如果服务器证书和客户端证书是由相同证书颁发机构 (CA) 颁发，则您可以在创建客户端 VPN 端点时在服务器和客户端中使用服务器证书 ARN。在上述步骤中，使用了相同 CA 来创建两个证书。但是，为了完整起见，其中包括上传客户端证书的步骤。

------
#### [ Windows ]

以下过程安装 Easy-RSA 3.x 软件，并使用它生成服务器和客户端证书和密钥。

**生成服务器和客户端证书和密钥并将它们上载到 ACM**

1. 打开 [EasyRSA 版本](https://github.com/OpenVPN/easy-rsa/releases)页面，然后下载适用于您的 Windows 版本的 ZIP 文件并对它进行解压缩。

1. 打开命令提示符，然后导航到 `EasyRSA-3.x` 文件夹解压缩到的位置。

1. 运行以下命令以打开 EasyRSA 3 shell。

   ```
   C:\Program Files\EasyRSA-3.x> .\EasyRSA-Start.bat
   ```

1. 初始化一个新的 PKI 环境。

   ```
   # ./easyrsa init-pki
   ```

1. 要构建新的证书颁发机构（CA），请运行此命令并按照提示进行操作。

   ```
   # ./easyrsa build-ca nopass
   ```

1. 生成服务器证书和密钥。

   ```
   # ./easyrsa --san=DNS:server build-server-full server nopass
   ```

1. 生成客户端证书和密钥。

   ```
   # ./easyrsa build-client-full client1.domain.tld nopass
   ```

   您可以选择为需要客户端证书和密钥的每个客户端（最终用户）重复此步骤。

1. 退出 EasyRSA 3 shell。

   ```
   # exit
   ```

1. 将服务器证书和密钥和客户端证书和密钥复制到自定义文件夹，然后导航到此自定义文件夹。

   复制证书和密钥之前，请使用 `mkdir` 命令创建自定义文件夹。以下示例在您的 C:\$1 驱动器中创建自定义文件夹。

   ```
   C:\Program Files\EasyRSA-3.x> mkdir C:\custom_folder
   C:\Program Files\EasyRSA-3.x> copy pki\ca.crt C:\custom_folder
   C:\Program Files\EasyRSA-3.x> copy pki\issued\server.crt C:\custom_folder
   C:\Program Files\EasyRSA-3.x> copy pki\private\server.key C:\custom_folder
   C:\Program Files\EasyRSA-3.x> copy pki\issued\client1.domain.tld.crt C:\custom_folder
   C:\Program Files\EasyRSA-3.x> copy pki\private\client1.domain.tld.key C:\custom_folder
   C:\Program Files\EasyRSA-3.x> cd C:\custom_folder
   ```

1. 将服务器证书和密钥以及客户端证书和密钥上传到 ACM。请确保在您打算在其中创建客户端 VPN 终端节点的同一区域中上传证书。以下命令 AWS CLI 使用上传证书。要改为使用 ACM 控制台上传证书，请参阅 *AWS Certificate Manager 用户指南*中的[导入证书](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-api-cli.html)。

   ```
   aws acm import-certificate \
       --certificate fileb://server.crt \ 
       --private-key fileb://server.key \
       --certificate-chain fileb://ca.crt
   ```

   ```
   aws acm import-certificate \
       --certificate fileb://client1.domain.tld.crt \
       --private-key fileb://client1.domain.tld.key \
       --certificate-chain fileb://ca.crt
   ```

   您不必将客户端证书上传到 ACM。如果服务器证书和客户端证书是由相同证书颁发机构 (CA) 颁发，则您可以在创建客户端 VPN 端点时在服务器和客户端中使用服务器证书 ARN。在上述步骤中，使用了相同 CA 来创建两个证书。但是，为了完整起见，其中包括上传客户端证书的步骤。

------

# 续订 AWS Client VPN 服务器证书
<a name="mutual-renew"></a>

您可以续订并重新导入已过期的 Client VPN 服务器证书。根据您使用的 OpenVPN easy-rsa 版本，过程会有所不同。有关更多详细信息，请参阅 [Easy-RSA 3 证书续订和吊销文档](https://github.com/OpenVPN/easy-rsa/blob/master/doc/EasyRSA-Renew-and-Revoke.md)。

**续订服务器证书**

1. 请执行以下操作**之一**：
   + Easy-RSA 版本 3.1.x

     1. 运行证书续订命令。

       ```
       $ ./easyrsa renew server nopass
       ```
   + Easy-RSA 版本 3.2.x

     1. 运行过期命令。

        ```
        $ ./easyrsa expire server
        ```

     1. 签署新证书。

        ```
        $ ./easyrsa --san=DNS:server sign-req server server
        ```

1. 创建一个自定义文件夹，将新文件复制到该文件夹中，然后导航到该文件夹。

   ```
   $ mkdir ~/custom_folder2
   $ cp pki/ca.crt ~/custom_folder2/
   $ cp pki/issued/server.crt ~/custom_folder2/
   $ cp pki/private/server.key ~/custom_folder2/
   $ cd ~/custom_folder2/
   ```

1. 将新文件导入到 ACM。确保将文件导入与 Client VPN 端点相同的区域中。

   ```
   $ aws acm import-certificate \
       --certificate fileb://server.crt \
       --private-key fileb://server.key \
       --certificate-chain fileb://ca.crt \
       --certificate-arn arn:aws:acm:region:123456789012:certificate/12345678-1234-1234-1234-12345678901
   ```