

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

# IPsec 使用证书身份验证进行配置
<a name="config-ipsec-ca-auth"></a>

以下主题提供了在 for ONTAP 文件系统和运行 Lib IPsec res FSx WAN 的客户端上使用证书身份验证配置 IPsec 加密的说明。此解决方案使用 AWS Certificate Manager 和 AWS 私有证书颁发机构 来创建私有证书颁发机构并生成证书。

在 ONTAP 文件系统和连接 FSx 的客户端上使用证书身份验证配置 IPsec 加密的高级步骤如下：

1. 设立证书颁发机构来颁发证书。

1. 为文件系统和客户端生成和导出 CA 证书。

1. 在客户端实例 IPsec 上安装证书并进行配置。

1. 在您的文件系统 IPsec 上安装证书并进行配置。

1. 定义安全策略数据库（SPD）。

1. 配置 IPsec 多客户端访问权限。

## 创建和安装 CA 证书
<a name="create-and-install-certificates"></a>

要进行证书身份验证，您需要在 for ONTAP 文件系统上生成并安装来自证书颁发机构的证书，以及将访问文件系统上数据的客户端。 FSx 以下示例 AWS 私有证书颁发机构 用于设置私有证书颁发机构，并生成要安装在文件系统和客户端上的证书。使用 AWS 私有证书颁发机构，您可以创建由根证书颁发机构和从属证书颁发机构 (CAs) 组成的完全 AWS 托管的层次结构，供组织内部使用。此过程分为五个步骤：

1. 使用创建私有证书颁发机构 (CA) AWS 私有 CA

1. 在私有 CA 上颁发并安装根证书

1. 从 AWS Certificate Manager 为您的文件系统和客户端申请私有证书

1. 为文件系统和客户端导出证书。

有关更多信息，请参阅《 AWS 私有证书颁发机构 用户指南》中的[私有 CA 管理](https://docs.aws.amazon.com/privateca/latest/userguide/creating-managing.html)。

**创建根私有 CA**

1. 创建 CA 时，必须在提供的文件中指定 CA 配置。以下命令使用 Nano 文本编辑器创建 `ca_config.txt` 文件，指定以下信息：
   + 算法的名称
   + CA 用来签名的签名算法
   + X.500 主题信息

   ```
   $ > nano ca_config.txt
   ```

   随即显示文本编辑器。

1. 编辑 CA 规范文件。

   ```
   {
      "KeyAlgorithm":"RSA_2048",
      "SigningAlgorithm":"SHA256WITHRSA",
      "Subject":{
         "Country":"US",
         "Organization":"Example Corp",
         "OrganizationalUnit":"Sales",
         "State":"WA",
         "Locality":"Seattle",
         "CommonName":"*.ec2.internal"
      }
   }
   ```

1. 保存并关闭文件，退出文本编辑器。有关更多信息，请参阅[《 AWS 私有证书颁发机构 用户指南》中的创建 CA 的步骤](https://docs.aws.amazon.com/privateca/latest/userguide/Create-CA-CLI.html)。

1. 使用 C [create-certificate-authority](https://docs.aws.amazon.com/cli/latest/reference/acm-pca/create-certificate-authority.html) AWS 私有 CA LI 命令创建私有 CA。

   ```
   ~/home > aws acm-pca create-certificate-authority \
        --certificate-authority-configuration file://ca_config.txt \
        --certificate-authority-type "ROOT" \
        --idempotency-token 01234567 --region aws-region
   ```

   如果成功，此命令将输出 CA 的 Amazon 资源名称（ARN）。

   ```
   {
      "CertificateAuthorityArn": "arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012"
   }
   ```<a name="create-install-root-cert-CA"></a>

**为私有根 CA 创建和安装证书（AWS CLI）**

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/acm-pca/get-certificate-authority-csr.html](https://docs.aws.amazon.com/cli/latest/reference/acm-pca/get-certificate-authority-csr.html) AWS CLI 命令生成证书签名请求 (CSR)。

   ```
   $ aws acm-pca get-certificate-authority-csr \
        --certificate-authority-arn arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \
        --output text \
        --endpoint https://acm-pca.aws-region.amazonaws.com \
        --region eu-west-1 > ca.csr
   ```

   生成的文件 `ca.csr` 是以 base64 格式编码的 PEM 文件，其内容显示如下。

   ```
   -----BEGIN CERTIFICATE-----
    MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
    VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
    b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
    BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
    MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
    VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
    b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
    YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
    21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
    rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
    Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
    nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
    FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
    NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE=
    -----END CERTIFICATE-----
   ```

   有关更多信息，请参阅 AWS 私有证书颁发机构 用户指南中的[安装根 CA 证书](https://docs.aws.amazon.com/privateca/latest/userguide/PCACertInstall.html#InstallRoot)。

1. 使用[https://docs.aws.amazon.com/cli/latest/reference/acm-pca/issue-certificate.html](https://docs.aws.amazon.com/cli/latest/reference/acm-pca/issue-certificate.html) AWS CLI 命令在您的私有 CA 上颁发和安装根证书。

   ```
   $ aws acm-pca issue-certificate \
        --certificate-authority-arn arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \
        --csr file://ca.csr \
        --signing-algorithm SHA256WITHRSA \
        --template-arn arn:aws:acm-pca:::template/RootCACertificate/V1 \
        --validity Value=3650,Type=DAYS --region aws-region
   ```

1. 使用[https://docs.aws.amazon.com/cli/latest/reference/acm-pca/get-certificate.html](https://docs.aws.amazon.com/cli/latest/reference/acm-pca/get-certificate.html) AWS CLI 命令下载根证书。

   ```
   $ aws acm-pca get-certificate \
       --certificate-authority-arn arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \
       --certificate-arn arn:aws:acm-pca:aws-region:486768734100:certificate-authority/12345678-1234-1234-1234-123456789012/certificate/abcdef0123456789abcdef0123456789 \
       --output text --region aws-region > rootCA.pem
   ```

1. 使用[https://docs.aws.amazon.com/cli/latest/reference/acm-pca/import-certificate-authority-certificate.html](https://docs.aws.amazon.com/cli/latest/reference/acm-pca/import-certificate-authority-certificate.html) AWS CLI 命令在您的私有 CA 上安装根证书。

   ```
   $ aws acm-pca import-certificate-authority-certificate \
        --certificate-authority-arn arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \
        --certificate file://rootCA.pem --region aws-region
   ```<a name="generate-certificate"></a>

**生成并导出文件系统和客户端证书**

1. 使用[https://docs.aws.amazon.com/cli/latest/reference/acm/request-certificate.html](https://docs.aws.amazon.com/cli/latest/reference/acm/request-certificate.html) AWS CLI 命令请求 AWS Certificate Manager 证书以在您的文件系统和客户机上使用。

   ```
   $ aws acm request-certificate \
       --domain-name *.ec2.internal \
       --idempotency-token 12345 \
       --region aws-region \
       --certificate-authority-arn arn:aws:acm-pca:aws-region:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012
   ```

   如果请求成功，则返回颁发证书的 ARN。

1. 为了安全起见，您必须在导出私钥时为其分配密码。创建密码并将其存储在名为 `passphrase.txt` 的文件中

1. 使用[https://docs.aws.amazon.com/cli/latest/reference/acm/export-certificate.html](https://docs.aws.amazon.com/cli/latest/reference/acm/export-certificate.html) AWS CLI 命令导出之前颁发的私有证书。导出的文件包含证书、证书链以及与证书中嵌入的公钥关联的加密私有 2048 位 RSA 密钥。为了安全起见，您必须在导出私钥时为其分配密码。以下示例是 Linux EC2 实例。

   ```
   $ aws acm export-certificate \
        --certificate-arn arn:aws:acm:aws-region:111122223333:certificate/12345678-1234-1234-1234-123456789012 \
        --passphrase $(cat passphrase.txt | base64) --region aws-region > exported_cert.json
   ```

1. 使用以下 `jq` 命令从 JSON 响应中提取私钥和证书。

   ```
   $ passphrase=$(cat passphrase.txt | base64)
   cat exported_cert.json | jq -r .PrivateKey > prv.key                                    
   cat exported_cert.json | jq -r .Certificate > cert.pem
   ```

1. 使用以下 `openssl` 命令从 JSON 响应中解密私钥。输入命令后，系统会提示您输入密码。

   ```
   $ openssl rsa -in prv.key -passin pass:$passphrase -out decrypted.key 
   ```

## 在亚马逊 Linux 2 客户端 IPsec 上安装和配置 Libreswan
<a name="install-configure-libreswan"></a>

以下各节提供了在运行 Amazon Linux 2 的 Amazon EC2 实例上安装和配置 Libreswan IPsec 的说明。

**安装和配置 Libreswan**

1. 使用 SSH 连接到 EC2 实例。有关如何执行此操作的具体说明，请参阅《适用于 Linux 实例的 Amazon Elastic Compute Cloud 用户指南》中的[使用 SSH 客户端连接到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html#AccessingInstancesLinuxSSHClient)。

1. 运行以下命令安装 `libreswan`：

   ```
   $ sudo yum install libreswan
   ```

1. （可选）在后续步骤 IPsec 中进行验证时，如果没有这些设置，则可能会标记这些属性。我们建议在没有这些设置的情况下先测试您的设置。如果连接出现问题，请返回此步骤并进行以下更改。

   安装完成后，使用您的首选文本编辑器将以下条目添加到 `/etc/sysctl.conf` 文件中。

   ```
   net.ipv4.ip_forward=1
   net.ipv4.conf.all.accept_redirects = 0
   net.ipv4.conf.all.secure_redirects = 0
   net.ipv4.conf.all.send_redirects = 0
   net.ipv4.conf.default.accept_redirects = 0
   net.ipv4.conf.default.send_redirects = 0
   net.ipv4.conf.lo.accept_redirects = 0
   net.ipv4.conf.lo.send_redirects = 0
   net.ipv4.conf.all.rp_filter = 0
   net.ipv4.conf.default.rp_filter = 0
   net.ipv4.conf.eth0.rp_filter = 0
   ```

   保存更改，退出文本编辑器。

1. 应用更改。

   ```
   $ sudo sysctl -p
   ```

1. 验证 IPsec 配置。

   ```
   $ sudo ipsec verify
   ```

   验证您安装的 `Libreswan` 版本是否正常运行。

1. 初始化 IPsec NSS 数据库。

   ```
   $ sudo ipsec checknss
   ```

**在客户端上安装证书**

1. 将[您为客户端生成的证书](#generate-certificate)复制到 EC2 实例上的工作目录中。You

1. 将之前生成的证书导出为与 `libreswan` 兼容的格式。

   ```
   $ openssl pkcs12 -export -in cert.pem -inkey decrypted.key \ 
       -certfile rootCA.pem -out certkey.p12 -name fsx
   ```

1. 导入重新格式化的密钥，并在系统提示时提供密码。

   ```
   $ sudo ipsec import certkey.p12
   ```

1. 使用首选文本编辑器创建 IPsec 配置文件。

   ```
   $ sudo cat /etc/ipsec.d/nfs.conf
   ```

   将以下条目添加到配置文件：

   ```
   conn fsxn
       authby=rsasig
       left=172.31.77.6
       right=198.19.254.13
       auto=start
       type=transport
       ikev2=insist
       keyexchange=ike
       ike=aes256-sha2_384;dh20
       esp=aes_gcm_c256
       leftcert=fsx
       leftrsasigkey=%cert
       leftid=%fromcert
       rightid=%fromcert
       rightrsasigkey=%cert
   ```

在文件系统 IPsec 上进行配置后，您将在客户端 IPsec 上启动。

## IPsec 在您的文件系统上进行配置
<a name="configure-ipsec-fsx-ontap-file-system"></a>

本节提供有关在 for ONTAP 文件系统上安装证书和配置 IPsec证书的说明。 FSx 

**在文件系统上安装证书**

1. 将根证书（`rootCA.pem)`）、客户端证书（`cert.pem`）和解密的密钥（`decrypted.key`）文件复制到您的文件系统。您需要知道证书的密码。

1. 要访问 ONTAP CLI，请运行以下命令在 Amazon FSx for NetApp ONTAP 文件系统或 SVM 的管理端口上建立 SSH 会话。将 `management_endpoint_ip` 替换为文件系统管理端口的 IP 地址。

   ```
   [~]$ ssh fsxadmin@management_endpoint_ip
   ```

   有关更多信息，请参阅 [使用 ONTAP CLI 管理文件系统](managing-resources-ontap-apps.md#fsxadmin-ontap-cli)。

1. 在客户端（而不是在您的文件系统）上使用 **cat** 列出 `rootCA.pem`、`cert.pem` 和 `decrypted.key` 文件的内容，以便复制每个文件的输出并在系统提示时粘贴到以下步骤中。

   ```
   $ > cat cert.pem
   ```

   复制证书内容。

1. 除非已经安装（例如 ONTAP 自签名 root-CA），否则您必须将双向身份验证期间使用的所有 CA ONTAP 证书（包括 ONTAP 端和客户端 CAs）安装到证书管理中。

   按如下方式使用 `security certificate install` NetApp CLI 命令安装客户证书：

   ```
   FSxID123:: > security certificate install -vserver dr -type client -cert-name ipsec-client-cert
   ```

   ```
   Please enter Certificate: Press <Enter> when done
   ```

   粘贴您之前复制的 `cert.pem` 文件的内容，然后按 Enter。

   ```
   Please enter Private Key: Press <Enter> when done
   ```

   粘贴 `decrypted.key` 文件的内容，然后按 Enter。

   ```
   Do you want to continue entering root and/or intermediate certificates {y|n}: 
   ```

   输入 `n` 以完成客户端证书的输入。

1. 创建并安装证书以供 SVM 使用。此证书的颁发者 CA 必须已安装ONTAP并添加到 IPsec。

   使用以下命令来安装根证书：

   ```
   FSxID123:: > security certificate install -vserver dr -type server-ca -cert-name ipsec-ca-cert 
   ```

   ```
   Please enter Certificate: Press <Enter> when done
   ```

   粘贴 `rootCA.pem` 文件的内容，然后按 Enter。

1. 要确保在身份验证期间安装的 CA 位于 IPsec CA 搜索路径中，请使用 “security ipsec ca-certificate add” 命令将ONTAP证书管理 CAs 添加到 IPsec 模块中。

   输入以下命令来添加根证书。

   ```
   FSxID123:: > security ipsec ca-certificate add -vserver dr -ca-certs ipsec-ca-cert
   ```

1. 输入以下命令在安全 IPsec 策略数据库 (SPD) 中创建所需的策略。

   ```
   security ipsec policy create -vserver dr -name policy-name -local-ip-subnets 198.19.254.13/32 -remote-ip-subnets 172.31.0.0/16 -auth-method PKI -action ESP_TRA -cipher-suite SUITEB_GCM256 -cert-name ipsec-client-cert -local-identity "CN=*.ec2.internal" -remote-identity "CN=*.ec2.internal"
   ```

1. 使用以下命令显示要确认的文件系统的 IPsec 策略。

   ```
   FSxID123:: > security ipsec policy show -vserver dr -instance
   
                                       Vserver: dr
                                   Policy Name: promise
                              Local IP Subnets: 198.19.254.13/32
                             Remote IP Subnets: 172.31.0.0/16
                                   Local Ports: 0-0
                                  Remote Ports: 0-0
                                     Protocols: any
                                        Action: ESP_TRA
                                  Cipher Suite: SUITEB_GCM256
             IKE Security Association Lifetime: 86400
           IPsec Security Association Lifetime: 28800
   IPsec Security Association Lifetime (bytes): 0
                             Is Policy Enabled: true
                                Local Identity: CN=*.ec2.internal
                               Remote Identity: CN=*.ec2.internal
                         Authentication Method: PKI
                Certificate for Local Identity: ipsec-client-cert
   ```

## 在客户端 IPsec 上启动
<a name="start-ipsec-client"></a>

现在 IPsec ，在 ONTAP 文件系统和客户端上都进行了配置，您可以在客户端 IPsec 上启动。 FSx 

1. 使用 SSH 连接到文件系统。

1. 开始 IPsec。

   ```
   $ sudo ipsec start
   ```

1. 检查的状态 IPsec。

   ```
   $ sudo ipsec status
   ```

1. 在您的文件系统上挂载卷。

   ```
   $ sudo mount -t nfs 198.19.254.13:/benchmark /home/ec2-user/acm/dr
   ```

1. 通过在 for ONTAP 文件系统上显示加密连接来验证 IPsec 设置。 FSx 

   ```
   FSxID123:: > security ipsec show-ikesa -node FsxId123
   FsxId08ac16c7ec2781a58::> security ipsec show-ikesa -node FsxId08ac16c7ec2781a58-01
               Policy Local           Remote
   Vserver     Name   Address         Address         Initator-SPI     State
   ----------- ------ --------------- --------------- ---------------- -----------
   dr          policy-name
                      198.19.254.13   172.31.77.6     551c55de57fe8976 ESTABLISHED
   fsx         policy-name
                      198.19.254.38   172.31.65.193   4fd3f22c993e60c5 ESTABLISHED
   2 entries were displayed.
   ```

## IPsec 为多个客户机进行设置
<a name="ipsec-multi-client-setup"></a>

当少数客户需要利用时 IPsec，为每个客户使用单个 SPD 条目就足够了。但是，当需要利用数百甚至数千个客户端时 IPsec，我们建议您使用 IPsec 多个客户端配置。

FSx for ONTAP 支持在启用后将跨多个网络的多个客户端连接到单个 SVM IP 地址。 IPsec 您可以使用 `subnet` 配置或 `Allow all clients` 配置来完成此操作，详细过程如下：

**使用子网配置 IPsec 为多台客户机进行配置**

要允许特定子网（例如 192.168.134.0/24）上的所有客户端使用单个 SPD 策略条目连接到单个 SVM IP 地址，必须以子网形式指定 `remote-ip-subnets`。此外，您必须使用正确的客户端标识来指定 `remote-identity` 字段。
**重要**  
使用证书身份验证时，每个客户端都可以使用自己的唯一证书或共享证书进行身份验证。 FSx for ONTAP IPsec 会根据其本地信任存储中 CAs 安装的证书来检查证书的有效性。 FSx 适用于 ONTAP 还支持证书吊销列表 (CRL) 检查。

1. 要访问 ONTAP CLI，请运行以下命令在 Amazon FSx for NetApp ONTAP 文件系统或 SVM 的管理端口上建立 SSH 会话。将 `management_endpoint_ip` 替换为文件系统管理端口的 IP 地址。

   ```
   [~]$ ssh fsxadmin@management_endpoint_ip
   ```

   有关更多信息，请参阅 [使用 ONTAP CLI 管理文件系统](managing-resources-ontap-apps.md#fsxadmin-ontap-cli)。

1. 按如下方式使用 `security ipsec policy create` NetApp ONTAP CLI 命令，用您的特定*sample*值替换这些值。

   ```
   FsxId123456::> security ipsec policy create -vserver svm_name -name policy_name \
     -local-ip-subnets 192.168.134.34/32 -remote-ip-subnets 192.168.134.0/24 \
     -local-ports 2049 -protocols tcp -auth-method PSK \
     -cert-name my_nfs_server_cert -local-identity ontap_side_identity \
     -remote-identity client_side_identity
   ```

**使用 “允许所有客户端” 配置 IPsec 为多台客户机进行配置**

要允许任何客户端（无论其源 IP 地址如何）连接到 IPsec启用了 SVM 的 IP 地址，请在指定字段时使用通`0.0.0.0/0`配符。`remote-ip-subnets`

此外，您必须使用正确的客户端标识来指定 `remote-identity` 字段。对于证书身份验证，您可以输入 `ANYTHING`。

此外，使用 0.0.0.0/0 通配符时，必须配置要使用的特定本地或远程端口号。例如，NFS 端口 2049。

1. 要访问 ONTAP CLI，请运行以下命令在 Amazon FSx for NetApp ONTAP 文件系统或 SVM 的管理端口上建立 SSH 会话。将 `management_endpoint_ip` 替换为文件系统管理端口的 IP 地址。

   ```
   [~]$ ssh fsxadmin@management_endpoint_ip
   ```

   有关更多信息，请参阅 [使用 ONTAP CLI 管理文件系统](managing-resources-ontap-apps.md#fsxadmin-ontap-cli)。

1. 按如下方式使用 `security ipsec policy create` NetApp ONTAP CLI 命令，用您的特定*sample*值替换这些值。

   ```
   FsxId123456::> security ipsec policy create -vserver svm_name -name policy_name \
     -local-ip-subnets 192.168.134.34/32 -remote-ip-subnets 0.0.0.0/0 \
     -local-ports 2049 -protocols tcp -auth-method PSK \
     -cert-name my_nfs_server_cert -local-identity ontap_side_identity \
     -local-ports 2049 -remote-identity client_side_identity
   ```