Qué hay en un certificado
Un certificado X.509 vincula una clave pública a un nombre, firmado por un emisor. Los campos que importan cuando algo no funciona:
- Subject Alternative Name: la lista de nombres de host (e IP) para los que el certificado es válido. Los navegadores ignoran por completo el Common Name; un certificado sin el nombre de host en su SAN falla con NET::ERR_CERT_COMMON_NAME_INVALID diga lo que diga el CN.
- Validez: notBefore y notAfter. Los certificados finales de confianza pública pueden durar como máximo 398 días (reduciéndose a 47 en 2029); Let’s Encrypt emite certificados de 90 días.
- Emisor y la cadena: un servidor debe enviar su certificado final más cada intermedio hasta (pero sin incluir) una raíz en la que confíe el cliente. «Unable to get local issuer certificate» casi siempre significa que falta un intermedio.
- Key usage / extended key usage: un certificado de servidor necesita TLS server auth; una CA necesita keyCertSign y CA:TRUE en basic constraints.
- Authority Information Access: de dónde obtener el certificado del emisor y el respondedor OCSP; CRL distribution points: dónde están las listas de revocación.
- Algoritmo de firma: hoy sha256WithRSA, ecdsa-with-SHA256 o Ed25519; las firmas SHA-1 se rechazan en todas partes.
Huellas
La huella SHA-256 es el hash de todo el certificado codificado en DER, usada para pinning y para comparar lo que envía un servidor con lo que esperas (openssl x509 -fingerprint -sha256). Cambia con cada renovación, por eso hacer pinning de certificados finales es frágil; haz pinning de la clave pública (SPKI) o de un intermedio.
CSR
Una solicitud de firma de certificado contiene el sujeto, la clave pública y las extensiones solicitadas, firmada con la clave privada correspondiente como prueba de posesión. Las CA copian el SAN de la solicitud (o de los dominios validados) e ignoran casi todo lo demás. Comprobar un CSR antes de enviarlo ahorra un viaje cuando el SAN está mal.
Obtener el PEM
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null 2>/dev/null | openssl x509 # solo el final
openssl s_client -connect example.com:443 -showcerts </dev/null 2>/dev/null | sed -n '/BEGIN/,/END/p' # toda la cadena
openssl x509 -in cert.der -inform der -out cert.pem # DER → PEM Preguntas
¿Puedo pegar un archivo .crt, .cer o .der?
Pega el texto de los archivos PEM (.pem, .crt, .cer cuando empiezan por -----BEGIN). El DER binario hay que convertirlo primero: openssl x509 -inform der -in archivo -out archivo.pem. También se acepta el Base64 en bruto de un certificado DER sin las líneas BEGIN/END.
¿Por qué el decodificador dice que el CN no está en el SAN?
Los navegadores solo comprueban el SAN. Un certificado con CN=example.com pero SAN=www.example.com no funcionará para example.com. Reemítelo con todos los nombres de host en el SAN.
¿Qué significa aquí «autofirmado»?
El emisor y el sujeto son idénticos. Es normal para una CA raíz y para certificados de desarrollo, pero los navegadores rechazarán un certificado final autofirmado salvo que esté instalado como de confianza.
¿Se envía mi certificado a un servidor?
No. La decodificación usa un analizador ASN.1 escrito en JavaScript y se ejecuta en tu navegador. Aun así, las claves privadas se rechazan de inmediato; un certificado es público por naturaleza, una clave nunca.