

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

# 使用 Certificate Manager 進行 AWS 憑證管理
<a name="origin-certificate-management-certificate-manager"></a>

[AWS Certificate Manager (ACM)](https://aws.amazon.com/certificate-manager/) 會存放 CloudFront 在原始伺服器交互 TLS 身分驗證期間提供給原始伺服器的用戶端憑證。

## 憑證授權單位支援
<a name="origin-ca-support"></a>

CloudFront 原始伺服器 mTLS 需要具有延伸金鑰使用 (EKU) 的用戶端憑證，才能進行 TLS 用戶端身分驗證。由於此要求，您必須從憑證授權單位發行憑證，並將其匯入 AWS Certificate Manager。ACM 的自動憑證佈建和續約功能不適用於原始伺服器 mTLS 用戶端憑證。CloudFront 原始伺服器 mTLS 支援來自兩個來源的用戶端憑證：
+ **AWS 私有憑證授權單位：**您可以使用延伸金鑰使用欄位中包含 TLS 用戶端身分驗證的憑證範本 （例如 EndEntityClientAuthCertificate 範本），從 AWS 私有 CA 發行憑證。從 AWS Private CA 發行憑證後，您必須將其匯入美國東部 （維吉尼亞北部） 區域 (us-east-1) 的 ACM。此方法提供 AWS Private CA 的安全優勢，同時讓您控制憑證生命週期管理。
+ **第三方私有憑證授權機構：**您也可以從現有的私有憑證授權機構基礎設施發行憑證，並將其匯入 ACM。這可讓您維護目前的憑證管理程序，同時利用 CloudFront 的原始伺服器 mTLS 功能。憑證必須在延伸金鑰使用欄位中包含 TLS 用戶端身分驗證，而且必須是具有憑證、私有金鑰和憑證鏈的 PEM 格式。

**重要**  
對於 AWS 私有 CA 和第三方 CAs，您需負責監控憑證過期日期，並在過期前將續約的憑證匯入 ACM。ACM 的自動續約功能不適用於用於原始伺服器 mTLS 的匯入憑證。

## 憑證需求和規格
<a name="origin-certificate-requirements"></a>

### 用戶端憑證需求
<a name="origin-ca-cert-format-requirements"></a>
+ **格式：**PEM （隱私權增強郵件） 格式
+ **元件：**憑證、私有金鑰和憑證鏈
+ **憑證鏈深度上限：**3 （分葉憑證 \+ 中繼憑證 \+ 根憑證）
+ **憑證鏈大小上限：**64 KB
+ **憑證大小：**不能超過 96 KB
+ **私有金鑰大小上限：**5 KB (ACM 限制）
+ **每個 CloudFront 分佈建立或更新 API 呼叫可新增或修改的唯一原始伺服器 mTLS 憑證 ARNs 上限：**5
+ **區域：**憑證必須存放在美國東部 （維吉尼亞北部） 區域的 ACM 中 (us-east-1)

### 支援的憑證規格
<a name="origin-supported-cert-specs"></a>
+ **憑證類型：**X.509v3
+ **公有金鑰演算法：**
  + RSA：2048 位元
  + ECDSA：P-256
+ **簽章演算法：**
  + SHA256, SHA384, SHA512搭配 RSA
  + SHA256, SHA384, SHA512搭配 ECDSA
  + SHA256, SHA384, SHA512搭配 RSASSA-PSS 搭配 MGF1
+ **擴充金鑰用量 （必要）：**憑證需要將擴充金鑰用量 (EKU) 擴充功能設定為 TLS 用戶端身分驗證，以確保授權用於 mTLS 目的

### 伺服器憑證需求
<a name="origin-server-certificate-requirements"></a>

在交互 TLS 交握期間，您的原始伺服器必須呈現來自公開信任憑證授權單位的憑證。如需原始伺服器憑證需求的完整詳細資訊，請參閱[搭配 CloudFront 使用 SSL/TLS 憑證的要求](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-cloudfront-to-custom-origin.html#using-https-cloudfront-to-origin-certificate)。

### 請求或匯入憑證
<a name="origin-request-import-certificate"></a>

啟用原始伺服器 mTLS 之前，您必須在 ACM 中擁有可用的用戶端憑證。

#### 從 AWS Private CA 請求和匯入憑證
<a name="request-certificate-aws-private-ca"></a>

事前準備：
+ 您帳戶中設定的 AWS 私有憑證授權機構
+ 從 AWS Private CA 發行憑證的許可
+ 將憑證匯入 ACM 的許可
+ `Extended key usage:TLS web client authentication` 適合您使用案例的[憑證範本](https://docs.aws.amazon.com/privateca/latest/userguide/UsingTemplates.html) ARN
+ 安裝 OpenSSL、 AWS CLI 和 jq （用於剖析 JSON)。

##### 從 PCA 請求憑證並匯入 ACM (AWS CLI)
<a name="request-certificate-cli"></a>

1. 在變數中設定您的私有 CA ARN，以便於重複使用。

   ```
   PCA_ARN="arn:aws:acm-pca:region:account:certificate-authority/12345678..."
   ```

1. 使用 OpenSSL 產生 ECDSA P-256 私有金鑰 (prime256v1 曲線） 和憑證簽署請求 (CSR)，確保使用 節點旗標來保持私有金鑰在 ACM 匯入所需的非加密狀態。

   ```
   openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -nodes \
       -keyout private.key \
       -out request.csr \
       -subj "/CN=client.example.com"
   ```

1. 將 CSR 提交至您的 AWS Private CA 以發行憑證，這會傳回新發行憑證的 ARN。

   ```
   CERT_ARN=$(aws acm-pca issue-certificate \
       --certificate-authority-arn "$PCA_ARN" \
       --csr fileb://request.csr \
       --signing-algorithm "SHA256WITHECDSA" \
       --validity Value=365,Type="DAYS" \
       --template-arn arn:aws:acm-pca:::template/EndEntityCertificate/V1 \
       --query 'CertificateArn' --output text)
   ```

1. 使用 get-certificate 命令從 AWS PCA 擷取憑證套件，這會傳回分葉憑證和鏈結，然後使用 jq 將其分隔成不同的檔案。

   ```
   # Retrieve the full certificate bundle in JSON format
   aws acm-pca get-certificate \
       --certificate-authority-arn "$PCA_ARN" \
       --certificate-arn "$CERT_ARN" \
       --output json > full_cert.json
   
   # Split into Leaf and Chain
   jq -r '.Certificate' full_cert.json > leaf_cert.pem
   jq -r '.CertificateChain' full_cert.json > cert_chain.pem
   ```

1. 使用 fileb：// 通訊協定將未加密的私有金鑰、分葉憑證和憑證鏈匯入 AWS ACM，以正確處理 CLI 中的二進位檔案資料。

   ```
   aws acm import-certificate \
       --certificate fileb://leaf_cert.pem \
       --private-key fileb://private.key \
       --certificate-chain fileb://cert_chain.pem \
       --region us-east-1 \
       --query 'CertificateArn' \
       --output text
   ```

#### 從第三方 CA 匯入憑證
<a name="import-certificate-third-party-ca"></a>

事前準備：
+ 來自您憑證授權單位的 PEM 格式憑證、未加密私有金鑰和憑證鏈
+ 憑證必須包含 TLS 用戶端身分驗證的延伸金鑰使用量
+ 將憑證匯入 ACM 的許可

##### 將憑證匯入 ACM (AWS CLI)
<a name="import-certificate-cli"></a>

```
aws acm import-certificate \
  --certificate fileb://certificate.pem \
  --private-key fileb://private-key.pem \
  --certificate-chain fileb://certificate-chain.pem \
  --region us-east-1 \
  --query 'CertificateArn' \
  --output text
```

#### 後續步驟
<a name="certificate-next-steps"></a>

在 ACM 中取得或匯入用戶端憑證後，您可以將原始伺服器設定為需要交互 TLS 身分驗證，並在 CloudFront 分佈上啟用原始伺服器 mTLS。如需在 CloudFront 中啟用原始伺服器 mTLS 的說明，請參閱下一節「為 CloudFront 分佈啟用原始伺服器交互 TLS」。