

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

# 其他驗證模式
<a name="mtls-validation-modes"></a>

CloudFront 交互 TLS 的預設值為必要模式 — CloudFront 會驗證每個用戶端憑證，並拒絕失敗的連線。不過，若要支援其他使用案例，例如提供混合 mTLS 驗證和未驗證用戶端的應用程式，或是原始伺服器執行自己的 mTLS 驗證的環境，CloudFront 支援兩種額外的模式。

**選用模式**專為混合用戶端人口的應用程式而設計。例如，入口網站為未經驗證的瀏覽器提供公開內容，同時將 API 端點限制為提供有效憑證的用戶端。或者，您逐漸將用戶端加入 mTLS，且需要在轉換期間允許已驗證和未驗證連線的遷移案例。

**傳遞模式**是專為原始伺服器已執行 mTLS 驗證的客戶所設計。例如，從現場部署反向代理遷移的服務、其他 CDNs 或已處理憑證驗證的 Application Load Balancer。傳遞模式可讓這些客戶將 CloudFront 放置在其應用程式前面，而無需在邊緣重新實作驗證邏輯。

## 選用模式
<a name="optional-mode-details"></a>

### 用戶端憑證驗證選用模式
<a name="optional-mode-overview"></a>

CloudFront 提供替代的選用用戶端憑證驗證模式，可驗證呈現的用戶端憑證，但允許存取不存在憑證的用戶端。

### 選用模式行為
<a name="optional-mode-behavior-details"></a>
+ 授予具有有效憑證的用戶端連線 （拒絕無效的憑證）。
+ 允許在沒有憑證的情況下連線至用戶端。
+ 允許透過單一分佈的混合用戶端身分驗證案例。

選用模式非常適合逐步遷移至 mTLS 身分驗證、支援具有憑證的用戶端和沒有憑證的用戶端，或與舊版用戶端保持回溯相容性。

**注意**  
在選用模式中，即使用戶端不存在憑證，連線函數仍會被叫用。這可讓您實作自訂邏輯，例如記錄用戶端 IP 地址，或根據是否顯示憑證套用不同的政策。

### 設定選用模式 （主控台）
<a name="configure-optional-mode-console-new"></a>

1. 在您的分佈設定中，導覽至**一般**索引標籤，選擇**編輯**。

1. 捲動至**連線**容器中的**檢視器交互身分驗證 (mTLS)** 區段。

1. 針對**用戶端憑證驗證模式**，選取**選用**。

1. 儲存變更。

### 設定選用模式 (AWS CLI)
<a name="configure-optional-mode-cli-new"></a>

下列範例示範如何設定選用模式：

```
"ViewerMtlsConfig": {
    "Mode": "optional",
    ...other settings
}
```

**自訂憑證標頭**

在檢視器請求 CloudFront Functions 中使用 mTLS 協助程式函數，在憑證標頭到達原始伺服器之前重新命名、重新格式化或合併憑證標頭。從使用不同標頭名稱或憑證編碼格式的其他服務遷移時，這很有用。

## 傳遞模式
<a name="passthrough-mode-details"></a>

傳遞模式可讓在其原始伺服器具有現有 mTLS 實作的客戶使用 CloudFront。CloudFront 會終止 TLS 連線，並將用戶端憑證轉送至原始伺服器做為 HTTP 標頭。您的原始伺服器會執行所有憑證驗證，包括鏈結驗證、撤銷檢查和自訂政策強制執行。

### 傳遞模式的運作方式
<a name="passthrough-how-it-works"></a>

1. 用戶端會連線至 CloudFront，並在 TLS 交握期間提供用戶端憑證。

1. CloudFront 會完成 TLS 交握，而不對信任存放區驗證憑證。

1. CloudFront 會將用戶端憑證和憑證鏈新增為請求上的 HTTP 標頭。

1. 請求會轉送到您的原始伺服器。不會快取任何內容。

1. 您的原始伺服器會驗證憑證並處理請求。

用戶端也可以連線而不出示憑證。您的原始伺服器或連線函數會處理空白憑證案例。

**注意**  
在傳遞模式中，即使用戶端沒有憑證，連線函數仍會被叫用。這可讓您實作自訂邏輯，例如記錄用戶端 IP 地址，或根據是否顯示憑證套用不同的政策。

### 組態需求
<a name="passthrough-configuration-requirements"></a>
+ **無信任存放**區 — 分佈必須具有零信任存放區關聯。
+ **快取已停用** — 所有快取行為都必須使用 受管`CachingDisabled`快取政策。
+ **禁止 Origin Shield** — 無法啟用 Origin Shield。
+ **禁止 Lambda@Edge** — 不允許 Lambda@Edge 函數關聯。
+ **需要原始伺服器請求政策** — 您必須允許列出原始伺服器請求政策中的 `Client-Cert`和 `Client-Cert-Chain`標頭，原始伺服器才能接收它們。
+ **Certificate-chain-depth** — CloudFront 允許用戶端憑證鏈的深度上限為 4，以便轉送至原始伺服器。

### 啟用傳遞模式
<a name="enable-passthrough-mode"></a>

#### 主控台
<a name="enable-passthrough-console"></a>

1. 更新所有快取行為以使用受管`CachingDisabled`快取政策。

1. 開啟 CloudFront 主控台並選擇您的分佈。

1. 選擇**一般**索引標籤，然後選擇設定下的**編輯**。

1. 在**檢視器交互身分驗證 (mTLS)** 下，選取**傳遞**。

1. 選擇**儲存變更**。

#### AWS CLI
<a name="enable-passthrough-cli"></a>

確保所有快取行為都參考 受管`CachingDisabled`政策，然後更新分佈組態：

```
{
  "ViewerMtlsConfig": {
    "Mode": "passthrough"
  }
}
```

### 轉送至原始伺服器的標頭
<a name="passthrough-headers-forwarded"></a>

CloudFront 會將下列標頭新增至傳送至原始伺服器的請求：
+ `Client-Cert` — 用戶端提供的終端實體 （分葉） 憑證，以 base64 編碼。
+ `Client-Cert-Chain` — 憑證鏈 （不含分葉），做為結構化欄位清單。每個憑證都是 base64 編碼。 `Client-Cert-Chain` 是清單類型標頭。它可能會在請求中出現多次。串連所有值會保留原始鏈結順序。當用戶端僅提供單一憑證時，`Client-Cert-Chain`會省略 。

CloudFront 會在新增實際憑證資料之前，從用戶端請求捨棄任何傳入的 `Client-Cert`或 `Client-Cert-Chain`標頭。這可防止標頭詐騙。

**自訂憑證標頭**

在檢視器請求 CloudFront Functions 中使用 mTLS 協助程式函數，在憑證標頭到達原始伺服器之前重新命名、重新格式化或合併憑證標頭。從使用不同標頭名稱或憑證編碼格式的其他服務遷移時，這很有用。