

# 상호 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` 헤더가 없으므로 함수는 no-op입니다.
`cf.mtls.*` 메서드와 `customHeaders`가 포함된 `cf.updateRequestOrigin()`이 동일한 헤더 이름을 대상으로 하는 경우 CloudFront는 502 오류를 반환합니다.
패스스루 모드에서 CloudFront는 수신 `Client-Cert` 또는 `Client-Cert-Chain` 헤더를 모두 삭제하고 실제 클라이언트 인증서에서 다시 추가합니다.
CloudFront는 엣지 함수에서 전체 원시 PEM 인증서 콘텐츠를 제공하지 않습니다.