

# 相互 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`) true の場合、base64 データに改行が保持されます。

`Client-Cert` および `Client-Cert-Chain` の場合:
+ `certHeader`[] が [] を置き換えます。`:`
+ `certFooter`[] が [] を置き換えます。`:`
+ `certEndMarker` は certFooter の後にカスタム文字列を設定します。
+ `keepNewlinesInCertData` (デフォルト: `false`) true の場合、base64 データに改行が保持されます。

## `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.*` メソッドと `customHeaders` を指定した `cf.updateRequestOrigin()` が同じヘッダー名をターゲットにしている場合、CloudFront は 502 エラーを返します。
パススルーモードでは、CloudFront は受信した `Client-Cert` ヘッダーまたは `Client-Cert-Chain` ヘッダーを削除し、実際のクライアント証明書から再追加します。
CloudFront は、エッジ関数に未加工の PEM 証明書の完全なコンテンツを表示しません。