

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

# 交互 TLS 的協助程式方法
<a name="mtls-helper-methods"></a>

CloudFront 在檢視器請求函數的`cf.mtls`命名空間中提供 mTLS 特定的協助程式函數。這些函數會重新命名、重新格式化或合併用戶端憑證標頭，然後再將請求轉送至原始伺服器。

```
import cf from "cloudfront";
```

## `cf.mtls.renameClientCertHeaders`
<a name="mtls-rename-client-cert-headers"></a>

將憑證中繼資料標頭重新命名為自訂標頭名稱。

```
cf.mtls.renameClientCertHeaders({
    "CloudFront-Viewer-Cert-Pem": "X-Client-Cert",
    "CloudFront-Viewer-Cert-Serial-Number": "X-Client-Cert-Serial",
    "CloudFront-Viewer-Cert-Issuer": "X-Client-Cert-Issuer",
});
```

允許的來源標頭：
+ `CloudFront-Viewer-Cert-Pem`
+ `CloudFront-Viewer-Cert-Serial-Number`
+ `CloudFront-Viewer-Cert-Issuer`
+ `CloudFront-Viewer-Cert-Subject`
+ `CloudFront-Viewer-Cert-Validity`
+ `CloudFront-Viewer-Cert-Present`
+ `CloudFront-Viewer-Cert-Sha256`
+ `Client-Cert`
+ `Client-Cert-Chain`

## `cf.mtls.renamePemHeaders`
<a name="mtls-rename-pem-headers"></a>

重新命名 PEM 憑證標頭，並選擇性地重新格式化憑證編碼。

```
cf.mtls.renamePemHeaders({
    "Client-Cert": {
        "newHeaderName": "X-Leaf-Cert",
        "pemCertFormatInfo": {
            "certHeader": "-----CUSTOM HEADER-----",
            "certFooter": "-----CUSTOM FOOTER-----",
            "certEndMarker": "",
            "keepNewlinesInCertData": true
        }
    },
    "Client-Cert-Chain": {
        "newHeaderName": "X-Intermediate-Certs",
        "pemCertFormatInfo": {
            "certHeader": "-----CUSTOM HEADER-----",
            "certFooter": "-----CUSTOM FOOTER-----",
            "certEndMarker": "",
            "keepNewlinesInCertData": true
        }
    }
});
```

允許的來源標頭：
+ 在傳遞模式中：`Client-Cert`、 `Client-Cert-Chain`
+ 在必要/選用模式中： `Cloudfront-Viewer-Cert-PEM`

**`pemCertFormatInfo` 欄位：**

在 `Cloudfront-Viewer-Cert-PEM` 中：
+ `certHeader` 取代了 `-----BEGIN CERTIFICATE-----`。
+ `certFooter` 取代了 `-----END CERTIFICATE-----`。
+ `certEndMarker` 會在 certFooter 之後設定自訂字串。
+ `keepNewlinesInCertData` （預設值：`true`) 會在 base64 資料中保留新行，若為 true。

針對 `Client-Cert` 和 `Client-Cert-Chain`：
+ `certHeader` 取代了 `:`。
+ `certFooter` 取代了 `:`。
+ `certEndMarker` 會在 certFooter 之後設定自訂字串。
+ `keepNewlinesInCertData` （預設值：`false`) 會在 base64 資料中保留新行，若為 true。

## `cf.mtls.combinePemHeaders`
<a name="mtls-combine-pem-headers"></a>

將 `Client-Cert`和 合併`Client-Cert-Chain`為包含完整憑證鏈的單一標頭。

```
cf.mtls.combinePemHeaders({
    "newHeaderName": "X-Full-Chain",
    "pemCertFormatInfo": {
        "certHeader": "-----BEGIN CERTIFICATE-----",
        "certFooter": "-----END CERTIFICATE-----",
        "certEndMarker": "\n",
        "keepNewlinesInCertData": false
    }
});
```

`certEndMarker` 會在憑證之間設定分隔符號。

**注意**  
這些協助程式函數可用於所有 mTLS 模式 （必要、選用和傳遞）。不過， `cf.mtls.combinePemHeaders`只會在傳遞模式中產生效果：在必要和選用模式中， `Client-Cert`和 `Client-Cert-Chain`標頭不存在，因此函數是無操作。
如果`cf.mtls.*`方法 和 `cf.updateRequestOrigin()` `customHeaders`的目標標頭名稱相同，CloudFront 會傳回 502 錯誤。
在傳遞模式中，CloudFront 會捨棄任何傳入 `Client-Cert`或 `Client-Cert-Chain`標頭，並從實際用戶端憑證重新新增它們。
CloudFront 不會在任何邊緣函數中顯示完整的原始 PEM 憑證內容。