Certificados X.509: Estructura, Tipos y Generación para Desarrolladores
Los certificados X.509 son la base de la Infraestructura de Clave Pública (PKI), ya que contienen claves públicas y datos del titular. Este estándar se remonta a X.500 DAP, ahora mayormente reemplazado por LDAP. Todas las estructuras se definen en ASN.1 —un metalenguaje para serialización de datos— con codificación según las reglas BER, CER, DER de X.690 o XER.
Estructura básica de TBSCertificate:
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING
}
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL
}
En ASN.1, SEQUENCE es como una struct en C. Para detalles de sintaxis, consulta X.680 (2008). Los certificados sirven principalmente como contenedores de claves públicas. También verifican la propiedad de dominios o identidades, aunque la fiabilidad varía.
Jerarquía y Tipos de Certificados
Las cadenas de confianza van desde la CA raíz hasta la entidad final.
- Raíz: Emisor igual al titular, basicConstraints.cA = TRUE.
- Intermedio: Firmado por una CA superior, construyendo la cadena.
- Entidad final: No firma a otros; usado por sistemas finales.
Por nivel de validación:
- DV (Validación de Dominio): Comprobación automática del dominio vía email o desafío HTTP.
- OV (Validación de Organización): Verifica WHOIS, registro, contactos —tarda unos días.
- EV (Validación Extendida): Auditoría completa del negocio, derechos exclusivos sobre el dominio, autorización. Se muestra como barra verde con nombre de la empresa. Requiere jurisdictionOfIncorporationCountryName, businessCategory, serialNumber en el titular.
Otros tipos:
- Multi-Dominio: SAN (subjectAltName) para varios dominios.
- Wildcard: CN=*.ejemplo.com para subdominios.
- Calificados: Certificados personales según RFC 3739 con givenName, dateOfBirth, countryOfCitizenship.
Generación de Certificados
Autofirmados con ECC
La Criptografía de Curva Elíptica (ECC) supera a RSA en eficiencia de CPU y tamaño de clave, pero el soporte en TLS <1.2 varía.
Genera clave privada secp521r1:
openssl ecparam -name secp521r1 -genkey -param_enc explicit -out clave-privada.pem
CSR con SHA256:
openssl req -new -sha256 -key clave-privada.pem -out server.csr -days 730
Autofirma:
openssl x509 -req -sha256 -days 365 -in server.csr -signkey clave-privada.pem -out publico.crt
Inspecciona:
openssl x509 -text -noout -in publico.crt
Ayuda: openssl -help, openssl x509 -help.
Con Java keytool
RSA 2048:
keytool -genkey -keyalg RSA -alias autofirmado -keystore keystore.jks -storepass contraseña -validity 360 -keysize 2048
Convierte a PKCS12:
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -deststoretype pkcs12
La salida incluye SubjectKeyIdentifier (OID 2.5.29.14, no crítico según RFC 5280).
Let's Encrypt (DV)
Instala certbot y obtén certificados:
sudo certbot certonly --standalone -d ejemplo.com -d www.ejemplo.com
(Para Gentoo: sudo emerge certbot; Debian: sudo apt-get install certbot -t stretch-backports; Fedora: sudo dnf install certbot).
Extensiones y Análisis
Los certificados usan OIDs para identificación: subjectKeyIdentifier ::= KeyIdentifier. Desglose completo con openssl x509 -text. Las cadenas construyen confianza: raíz → intermedios → hoja.
Lecciones clave:
- X.509 usa ASN.1: SEQUENCE como structs, codificación DER/BER.
- Tipos: DV/OV/EV por validación, wildcard/SAN para flexibilidad.
- Generación: openssl para ECC/RSA, keytool para JKS/PKCS12, certbot para Let's Encrypt.
- Cadena: raíz (cA=TRUE) → intermedios → entidad final.
Depura cadenas con openssl s_client -connect host:443 -showcerts. Estándares como X.680/690, RFC 5280/3739 garantizan interoperabilidad de PKI.
— Editorial Team
Aún no hay comentarios.