# Custom Certificates

> Añade certificados raíz, de servidor y de cliente personalizados a Proxyman para SSL pinning y autenticación mutua TLS, y genera un certificado raíz autofirmado que Apple considera de confianza.

## 1. ¿Qué es? {#1-whats-it}

Proxyman admite **Root Certificates**, **Server Certificates** y **Client Certificates** personalizados. Puedes añadir tus propios certificados, y Proxyman los usa para establecer la conexión SSL entre tus clientes, tus servidores y la app de Proxyman.

| Tipo de Custom Certificate | Uso                                                                                                  | Cómo lo usa Proxyman                                             |
| -------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
| **Server Certificate**     | Para interceptar tráfico HTTPS de clientes que usan SSL pinning                                      | Usa este certificado para el handshake SSL con tus clientes      |
| **Client Certificate**     | Para interceptar tráfico HTTPS de clientes que usan autenticación mutua                              | Usa este certificado para el handshake SSL con un servidor concreto |
| **Root Certificate**       | Para interceptar tráfico HTTPS de clientes y servidores sin usar los certificados locales de Proxyman | Handshake SSL tanto para clientes como para servidores           |

![Ventana Custom Certificates de Proxyman en la pestaña Root Certificate, con el certificado CA de Proxyman instalado y de confianza (Installed &#x26; Trusted)](https://proxyman.com/docs/assets/proxyman-custom-root-certificate.jpg)

_Pestaña Root Certificate_

> **Nota:** El certificado raíz de Proxyman se genera localmente en tu Mac. También puedes generar tu propio certificado raíz y añadirlo a Proxyman. Consulta [cómo generar un certificado raíz autofirmado](https://proxyman.com/docs/es/advanced-features/custom-certificates#6-how-to-generate-self-signed-certificates-for-custom-root-certificate-that-comply-with-new-apples-security-requirements).

## 2. Formatos de certificado {#2-certificate-formats}

Proxyman acepta los siguientes formatos:

| Custom Certificate | PEM or DER      | PKCS #12 (p12) |
| ------------------ | --------------- | -------------- |
| Root Certificate   | No compatible   | Compatible     |
| Client Certificate | Compatible      | Compatible     |
| Server Certificate | Compatible      | Compatible     |

* PKCS #12 (p12).
* Archivo de clave privada y certificado en formato PEM o DER.

> **Nota:**
>
> - Proxyman detecta automáticamente el formato del archivo de clave privada y certificado (PEM o DER).
> - Proxyman te pide la contraseña al importar un archivo de clave privada cifrada o PKCS #12.
> - Todas las contraseñas se almacenan de forma segura en el Keychain de Proxyman.

> **Nota:** Si tus certificados están en un formato que Proxyman no admite, conviértelos a p12 o PEM/DER antes de importarlos.

## 3. Requisitos de certificado en macOS 10.15+ e iOS 13+ {#3-certificate-requirement-on-macos-1015-and-ios-13}

Si usas un certificado raíz o de servidor personalizado en macOS 10.15 o posterior, o en iOS 13 o posterior, el handshake SSL puede fallar en Safari o en los dispositivos iOS a menos que el certificado cumpla estos requisitos:

* Las claves RSA deben tener un tamaño de 2048 bits o más
* El algoritmo hash debe pertenecer a la familia SHA-2
* El nombre DNS del servidor debe estar en Subject Alternative Name (SAN). Common Name (CN) ya no se considera de confianza
* El certificado debe ser válido (la fecha actual debe estar entre las fechas Not Before y Not After)
* Los certificados de servidor TLS deben contener una extensión ExtendedKeyUsage (EKU) con el OID **id-kp-serverAuth**.

Más información: [Requisitos para certificados de confianza en iOS 13 y macOS 10.15](https://support.apple.com/en-us/HT210176)

> **Nota:** Si esto resulta demasiado complicado, deja que Proxyman lo haga por ti. Abre el menú **Certificate** -> **Install Certificate on this Mac…** y selecciona la pestaña **Automatic**.

## 4. Problemas comunes {#4-common-issues}

| Problema                                                  | Solución                                                                                                                                                                                                                                                                                                 |
| --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| La clave privada y el certificado no coinciden            | Prueba con otros certificados y claves privadas y asegúrate de que coincidan                                                                                                                                                                                                                             |
| Aparece un error de SSL Handshake con certificados personalizados | <ul><li>Intenta añadir el certificado personalizado al System Keychain y márcalo como de confianza</li><li>El certificado no cumple los requisitos de macOS => Lee la [sección 3](https://proxyman.com/docs/es/advanced-features/custom-certificates#3-certificate-requirement-on-macos-1015-and-ios-13)</li><li>Comprueba la fecha de caducidad del certificado</li></ul> |
| No se pudo importar el certificado por una contraseña no válida | Pide a tu líder de equipo la contraseña correcta para abrir el archivo de clave privada cifrada o P12                                                                                                                                                                                                  |

## 5. Cómo usarlo {#5-how-to-use}

* Abre el menú **Certificate** -> **Add Custom Certificates…**

## 6. Cómo generar certificados autofirmados para un certificado raíz personalizado que cumpla los nuevos requisitos de seguridad de Apple {#6-how-to-generate-self-signed-certificates-for-custom-root-certificate-that-comply-with-new-apples-security-requirements}

Debido a los [requisitos de Apple desde iOS 13 y macOS Catalina (10.15)](https://proxyman.com/docs/es/advanced-features/custom-certificates#3-certificate-requirement-on-macos-1015-and-ios-13), necesitas una configuración adicional para generar un certificado autofirmado que funcione.

Sigue estos pasos:

1. Crea un archivo `cert.config` en la carpeta **Escritorio** (`~/Desktop`)

```
[ ca ]
default_ca    = CA_default
[ CA_default ]
default_md    = sha256
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage=critical,keyCertSign
extendedKeyUsage = serverAuth,clientAuth
[ req ]
prompt = no
distinguished_name    = req_distinguished_name
[ req_distinguished_name ]
C=US
L=US
O=Proxyman LLC
CN=proxyman.dev
OU=Proxyman
```

* Actualiza los valores de los parámetros C, L, O, CN y OU.

2\. Genera una clave RSA en la app Terminal. (Sustituye **your\_password** por cualquier contraseña, por ejemplo 123456)

```bash
cd ~/Desktop
openssl genrsa -aes256 -passout pass:your_password -out key.pem 2048
```

3\. Genera el certificado autofirmado y la clave privada. (Sustituye **your\_password** por la contraseña del paso 2)

```
openssl req -x509 -new -nodes -passin pass:your_password -config cert.config -key key.pem -sha256 -extensions v3_ca -days 825 -out root-ca.pem
```

4\. Convierte el certificado a formato p12. (Sustituye **your\_password** por la contraseña del paso 2)

```
openssl pkcs12 -export -legacy -out root-ca.p12 -in root-ca.pem -inkey key.pem -passin pass:your_password -passout pass:your_password
```

5\. Ya tienes el archivo **root-ca.p12**. Continúa con el siguiente paso.

> **Nota:** Si no puedes importar tu certificado personalizado en macOS 14 (OpenSSL v3) o posterior, usa la opción \`-legacy\` en el paso 4.
>
> Referencia: [MAC verification failed during PKCS12 import (Stack Overflow)](https://stackoverflow.com/questions/70431528/mac-verification-failed-during-pkcs12-import-wrong-password-azure-devops)

## 7. Importar como certificado raíz personalizado {#7-import-as-a-custom-root-certificate}

1. Abre el menú **Certificate** -> **Add Custom Certificates…** y selecciona la pestaña **Root Certificate**
2. Haz clic en el botón **Import** -> **Import P12...**
3. Selecciona el archivo **root-ca.p12** e introduce la contraseña.
4. Confía en tu certificado personalizado desde la app Keychain Access (Acceso a Llaveros):

* Abre la app Keychain Access
* Busca el certificado que has añadido. Su nombre puede ser el Common Name (CN) del certificado
* Haz doble clic para abrirlo y selecciona **Always Trust**
* Cierra la ventana para guardar el cambio

![Ventana del certificado en macOS Keychain Access con Trust configurado como Always Trust](https://proxyman.com/docs/assets/Screen%20Shot%202020-09-09%20at%2006.30.51.png)

5\. Comprueba que aparece la marca verde, lo que significa que el certificado está instalado y es de confianza.

## 8. Importar como certificado de servidor o de cliente {#8-import-as-a-serverclient-certificate}

Para los certificados personalizados de servidor o de cliente no generes un certificado autofirmado. Pide a tu compañero de equipo o a tu líder de equipo el certificado que usa tu empresa. Puede estar en formato DER/PEM o P12.

Después, impórtalo en las pestañas **Server Certificates** o **Client Certificates** de la ventana Custom Certificates.

![Hoja de importación de certificados de Proxyman con un archivo de certificado PEM y un archivo de clave privada seleccionados](https://proxyman.com/docs/assets/Screen%20Shot%202020-06-26%20at%2010.54.35.png)

> **Nota:** No necesitas confiar en el certificado en el System Keychain, porque no es un certificado raíz.

## Más información {#learn-more}

* [Cómo generar y usar certificados raíz personalizados en Proxyman](https://proxyman.com/posts/2020-09-09-Generate-Self-Signed-Certificate-iOS13-Mac-Catalina)
