

# Métodos auxiliares para la TLS mutua
<a name="mtls-helper-methods"></a>

CloudFront proporciona funciones auxiliares específicas de mTLS en el espacio de nombres de `cf.mtls` para las funciones de solicitud de los espectadores. Estas funciones renombran, reformatean o combinan los encabezados de los certificados de cliente antes de reenviar la solicitud al origen.

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

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

Cambia el nombre de los encabezados de metadatos de los certificados por nombres de encabezado personalizados.

```
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",
});
```

Los encabezados de origen permitidos:
+ `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>

Cambia el nombre de los encabezados de los certificados PEM y, opcionalmente, reformatea la codificación del certificado.

```
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
        }
    }
});
```

Los encabezados de origen permitidos:
+ En modo de transferencia: `Client-Cert`, `Client-Cert-Chain`
+ En modo obligatorio/opcional: `Cloudfront-Viewer-Cert-PEM`

**`pemCertFormatInfo` Campos:**

Para `Cloudfront-Viewer-Cert-PEM`:
+ `certHeader` sustituye a `-----BEGIN CERTIFICATE-----`.
+ `certFooter` sustituye a `-----END CERTIFICATE-----`.
+ `certEndMarker` establece una cadena personalizada después de certFooter.
+ `keepNewlinesInCertData` (predeterminado: `true`) conserva las líneas nuevas en los datos de base64 cuando son verdaderas.

Para `Client-Cert` y `Client-Cert-Chain`:
+ `certHeader` sustituye a `:`.
+ `certFooter` sustituye a `:`.
+ `certEndMarker` establece una cadena personalizada después de certFooter.
+ `keepNewlinesInCertData` (predeterminado: `false`) conserva las líneas nuevas en los datos de base64 cuando son verdaderas.

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

Combina `Client-Cert` y `Client-Cert-Chain` en un solo encabezado que contiene la cadena de certificados completa.

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

`certEndMarker` establece el delimitador entre los certificados.

**nota**  
Estas funciones auxiliares se pueden utilizar en todos los modos mTLS (obligatorio, opcional y de acceso directo). Sin embargo, `cf.mtls.combinePemHeaders` solo tiene efecto en el modo de acceso directo: en los modos obligatorio y opcional, los encabezados `Client-Cert` y `Client-Cert-Chain` no están presentes, por lo que la función no es operativa.
Si los métodos `cf.mtls.*` y `cf.updateRequestOrigin()` con el destino `customHeaders` tienen el mismo nombre de encabezado, CloudFront devuelve un error 502.
En el modo de acceso directo, CloudFront elimina los encabezados `Client-Cert` o `Client-Cert-Chain` entrantes y los vuelve a agregar desde el certificado de cliente real.
CloudFront no presenta el contenido completo del certificado PEM sin procesar en ninguna función de periferia.