

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

# 在 Application Load Balancer 中使用 TLS 進行相互身分驗證
<a name="mutual-authentication"></a>

相互 TLS 身分驗證是傳輸層安全性 (TLS) 的變化。傳統 TLS 會在伺服器和用戶端之間建立安全通訊，其中伺服器需要將其身分提供給其用戶端。使用交互 TLS，負載平衡器在交涉 TLS 時，在用戶端和伺服器之間交涉交互身分驗證。當您搭配 Application Load Balancer 使用交互 TLS 時，您可以簡化身分驗證管理並減少應用程式的負載。

透過使用交互 TLS，您的負載平衡器可以管理用戶端身分驗證，以協助確保只有信任的用戶端與您的後端應用程式通訊。當您使用此功能時，負載平衡器會使用來自第三方憑證授權單位 (CA) 的憑證，或選用 AWS 私有憑證授權單位 (PCA) 搭配撤銷檢查來驗證用戶端。負載平衡器會使用 HTTP 標頭將用戶端憑證資訊傳遞至後端，您的應用程式可用來進行授權。

Application Load Balancer 的相互 TLS 提供下列選項來驗證 X.509v3 用戶端憑證：
+ **相互 TLS 傳遞：**負載平衡器會將整個用戶端憑證鏈傳送至目標，而不進行驗證。目標應驗證用戶端憑證鏈。然後，使用用戶端憑證鏈，您可以在應用程式中實作負載平衡器身分驗證和目標授權邏輯。
+ **相互 TLS 驗證：**當負載平衡器交涉 TLS 連線時，負載平衡器會對用戶端執行 X.509 用戶端憑證驗證。

若要使用交互 TLS 傳遞，您必須設定接聽程式以接受來自用戶端的憑證。若要搭配驗證使用交互 TLS，請參閱 [在 Application Load Balancer 上設定交互 TLS](configuring-mtls-with-elb.md)。

## 開始在 Application Load Balancer 上設定交互 TLS 之前
<a name="mtls-for-awareness"></a>

開始在 Application Load Balancer 上設定交互 TLS 之前，請注意下列事項：

**配額**  
Application Load Balancer 包含與 AWS 帳戶中正在使用的信任存放區、CA 憑證和憑證撤銷清單數量相關的特定限制。  
如需詳細資訊，請參閱 [Quotas for your Application Load Balancers](load-balancer-limits.md)。

**憑證的需求**  
Application Load Balancer 支援下列與交互 TLS 身分驗證搭配使用的憑證：  
+ 支援的憑證：X.509v3
+ 支援的公有金鑰：RDA 2K – 8K 或 ECDSA secp256r1、secp384r1、secp521r1
+ 支援的簽章演算法：SHA256、384、512 搭配 RSA/SHA256、384、512 搭配 EC/SHA256、384、512 雜湊搭配 RSASSA-PSS 搭配 MGF1

**CA 憑證套件**  
下列適用於憑證授權機構 (CA) 套件：  
+ Application Load Balancer 會批次上傳每個憑證授權單位 (CA) 憑證套件。Application Load Balancer 不支援上傳個別憑證。如果您需要新增憑證，則必須上傳憑證套件檔案。
+ 若要取代 CA 憑證套件，請使用 [ModifyTrustStore](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_ModifyTrustStore.html) API。

**傳遞的憑證順序**  
當您使用交互 TLS 傳遞時，Application Load Balancer 會插入標頭，將用戶端憑證鏈呈現給後端目標。呈現順序從分葉憑證開始，並以根憑證結束。

**工作階段恢復**  
搭配 Application Load Balancer 使用交互 TLS 傳遞或驗證模式時，不支援工作階段恢復。

**HTTP 標頭**  
Application Load Balancer 使用 `X-Amzn-Mtls`標頭，在使用交互 TLS 交涉用戶端連線時傳送憑證資訊。如需詳細資訊和範例標頭，請參閱 [HTTP 標頭和交互 TLS](#mtls-http-headers)。

**CA 憑證檔案**  
CA 憑證檔案必須符合下列要求：  
+ 憑證檔案必須使用 PEM （隱私權增強型郵件） 格式。
+ 憑證內容必須括在 `-----BEGIN CERTIFICATE-----`和 `-----END CERTIFICATE-----`邊界內。
+ 註解前面必須加上`#`字元，且不得包含任何`-`字元。
+ 不能有任何空白行。
不接受的範例憑證 （無效）：  

```
# comments

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 01
    Signature Algorithm: ecdsa-with-SHA384
        Issuer: C=US, O=EXAMPLE, OU=EXAMPLE, CN=EXAMPLE
        Validity
            Not Before: Jan 11 23:57:57 2024 GMT
            Not After : Jan 10 00:57:57 2029 GMT
        Subject: C=US, O=EXAMPLE, OU=EXAMPLE, CN=EXAMPLE
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (384 bit)
                pub: 
                    00:01:02:03:04:05:06:07:08
                ASN1 OID: secp384r1
                NIST CURVE: P-384
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment, Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Subject Key Identifier: 
                00:01:02:03:04:05:06:07:08
            X509v3 Subject Alternative Name: 
                URI:EXAMPLE.COM
    Signature Algorithm: ecdsa-with-SHA384
         00:01:02:03:04:05:06:07:08
-----BEGIN CERTIFICATE-----
Base64–encoded certificate
-----END CERTIFICATE-----
```
接受的範例憑證 （有效）：  

1. 單一憑證 (PEM 編碼）：

   ```
   # comments
   -----BEGIN CERTIFICATE-----
   Base64–encoded certificate
   -----END CERTIFICATE-----
   ```

1. 多個憑證 (PEM 編碼）：

   ```
   # comments
   -----BEGIN CERTIFICATE-----
   Base64–encoded certificate
   -----END CERTIFICATE-----
   # comments
   -----BEGIN CERTIFICATE-----
   Base64–encoded certificate
   -----END CERTIFICATE-----
   -----BEGIN CERTIFICATE-----
   Base64–encoded certificate
   -----END CERTIFICATE-----
   ```

## HTTP 標頭和交互 TLS
<a name="mtls-http-headers"></a>

本節說明使用交互 TLS 與用戶端交涉連線時，Application Load Balancer 用來傳送憑證資訊的 HTTP 標頭。Application Load Balancer 使用的特定`X-Amzn-Mtls`標頭取決於您指定的交互 TLS 模式：傳遞模式或驗證模式。

如需 Application Load Balancer 支援的其他 HTTP 標頭的相關資訊，請參閱 [HTTP 標頭和 Application Load Balancer](x-forwarded-headers.md)。

### 傳遞模式的 HTTP 標頭
<a name="mtls-http-headers-passthrough"></a>

對於傳遞模式中的交互 TLS，Application Load Balancer 使用以下標頭。

#### X-Amzn-Mtls-Clientcert
<a name="example-pass-through"></a>

此標頭包含連線中呈現之整個用戶端憑證鏈的 URL 編碼 PEM 格式，並以 `+=/`做為安全字元。

**標頭內容範例：**

```
X-Amzn-Mtls-Clientcert: -----BEGIN%20CERTIFICATE-----%0AMIID<...reduced...>do0g%3D%3D%0A-----END%20CERTIFICATE-----%0A-----BEGIN%20CERTIFICATE-----%0AMIID1<...reduced...>3eZlyKA%3D%3D%0A-----END%20CERTIFICATE-----%0A
```

### 驗證模式的 HTTP 標頭
<a name="mtls-http-headers-verify"></a>

對於驗證模式中的交互 TLS，Application Load Balancer 使用以下標頭。

#### X-Amzn-Mtls-Clientcert-Serial-Number
<a name="example-verify1"></a>

此標頭包含分葉憑證序號的十六進位表示法。

**標頭內容範例：**

```
X-Amzn-Mtls-Clientcert-Serial-Number: 03A5B1
```

#### X-Amzn-Mtls-Clientcert-Issuer
<a name="example-verify1"></a>

此標頭包含發行者辨別名稱 (DN) 的 RFC2253 字串表示。

**標頭內容範例：**

```
X-Amzn-Mtls-Clientcert-Issuer: CN=rootcamtls.com,OU=rootCA,O=mTLS,L=Seattle,ST=Washington,C=US
```

#### X-Amzn-Mtls-Clientcert-Subject
<a name="example-verify1"></a>

此標頭包含主體辨別名稱 (DN) 的 RFC2253 字串表示法。

**標頭內容範例：**

```
X-Amzn-Mtls-Clientcert-Subject: CN=client_.com,OU=client-3,O=mTLS,ST=Washington,C=US
```

#### X-Amzn-Mtls-Clientcert-Validity
<a name="example-verify1"></a>

此標頭包含 `notBefore`和 `notAfter` 日期的 ISO8601 格式。

**標頭內容範例：**

```
X-Amzn-Mtls-Clientcert-Validity: NotBefore=2023-09-21T01:50:17Z;NotAfter=2024-09-20T01:50:17Z
```

#### X-Amzn-Mtls-Clientcert-Leaf
<a name="example-verify1"></a>

此標頭包含分葉憑證的 URL 編碼 PEM 格式，並以 `+=/`做為安全字元。

**標頭內容範例：**

```
X-Amzn-Mtls-Clientcert-Leaf: -----BEGIN%20CERTIFICATE-----%0AMIIG<...reduced...>NmrUlw%0A-----END%20CERTIFICATE-----%0A
```

## 公告憑證授權單位 (CA) 主旨名稱
<a name="advertise-ca-subject"></a>

廣告憑證授權機構 (CA) 主體名稱透過協助用戶端判斷在交互 TLS 身分驗證期間接受哪些憑證，來增強身分驗證程序。

當您啟用公告 CA 主體名稱時，Application Load Balancer 會根據其關聯的信任存放區，公告其信任的憑證授權機構 (CAs) 主體名稱清單。當用戶端透過 Application Load Balancer 連線至目標時，用戶端會收到信任的 CA 主體名稱清單。

在 TLS 交握期間，當 Application Load Balancer 請求用戶端憑證時，它會在其憑證請求訊息中包含信任的 CA 辨別名稱 (DNs) 清單。這有助於用戶端選取符合公告 CA 主體名稱的有效憑證，簡化身分驗證程序並減少連線錯誤。

您可以在新的和現有的接聽程式上啟用廣告 CA 主體名稱。如需詳細資訊，請參閱[新增 HTTPS 接聽程式](create-https-listener.md#add-https-listener)。

## Application Load Balancer 的連線日誌
<a name="mtls-logging"></a>

Elastic Load Balancing 提供連線日誌，可擷取傳送至 Application Load Balancer 之請求的屬性。連線日誌包含的資訊包括用戶端 IP 地址和連接埠、用戶端憑證資訊、連線結果和正在使用的 TLS 密碼。然後，這些連線日誌可用於檢閱請求模式和其他趨勢。

若要進一步了解連線日誌，請參閱 [Application Load Balancer 的連線日誌](load-balancer-connection-logs.md)