¿Cómo puedo generar un certificado autofirmado con SubjectAltName usando OpenSSL?

Estoy intentando generar un certificado autofirmado con OpenSSL con SubjectAltName en él. Mientras estoy generando el csr para el certificado, creo que tengo que usar las extensiones v3 de OpenSSL x509. Estoy usando :

openssl req -new -x509 -v3 -key private.key -out certificate.pem -days 730 

¿Alguien puede ayudarme con la syntax exacta?

¿Alguien puede ayudarme con la syntax exacta?

Es un proceso de tres pasos, e implica la modificación del archivo openssl.cnf . Es posible que pueda hacerlo solo con opciones de línea de comando, pero no lo hago de esa manera.

Encuentra tu archivo openssl.cnf . Es probable que se encuentre en /usr/lib/ssl/openssl.cnf :

 $ find /usr/lib -name openssl.cnf /usr/lib/openssl.cnf /usr/lib/openssh/openssl.cnf /usr/lib/ssl/openssl.cnf 

En mi sistema Debian, /usr/lib/ssl/openssl.cnf es utilizado por el progtwig integrado openssl . En los recientes sistemas Debian se encuentra en /etc/ssl/openssl.cnf

Puede determinar qué openssl.cnf se está utilizando al agregar un XXX falso al archivo y ver si openssl estrangula.


Primero, modifique los parámetros de req . Agregue una sección alternate_names a openssl.cnf con los nombres que desea usar. No hay secciones alternate_names nombres alternate_names , por lo que no importa dónde lo agregue.

 [ alternate_names ] DNS.1 = example.com DNS.2 = www.example.com DNS.3 = mail.example.com DNS.4 = ftp.example.com 

A continuación, agregue lo siguiente a la sección existente [ v3_ca ] . Busque la cadena exacta [ v3_ca ] :

 subjectAltName = @alternate_names 

Puede cambiar keyUsage a lo siguiente en [ v3_ca ] :

 keyUsage = digitalSignature, keyEncipherment 

digitalSignature y keyEncipherment son estándar para un certificado de servidor. No te preocupes por la no nonRepudiation . Es una parte inútil pensada por chicos de ciencia ficción que querían ser abogados. No significa nada en el mundo legal.

Al final, el IETF (RFC 5280), los navegadores y las CA se ejecutan de manera rápida y suelta, por lo que probablemente no importe el uso de la clave que proporciones.


En segundo lugar, modifique los parámetros de firma. Encuentre esta línea en la sección CA_default :

 # Extension copying option: use with caution. # copy_extensions = copy 

Y cámbialo a:

 # Extension copying option: use with caution. copy_extensions = copy 

Esto garantiza que las SAN se copien en el certificado. Las otras formas de copiar los nombres DNS están rotas.


En tercer lugar, genera tu autofirmado:

 $ openssl genrsa -out private.key 3072 $ openssl req -new -x509 -key private.key -sha256 -out certificate.pem -days 730 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. ... 

Finalmente, examine el certificado:

 $ openssl x509 -in certificate.pem -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: 9647297427330319047 (0x85e215e5869042c7) Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=MD, L=Baltimore, O=Test CA, Limited, CN=Test CA/emailAddress=test@example.com Validity Not Before: Feb 1 05:23:05 2014 GMT Not After : Feb 1 05:23:05 2016 GMT Subject: C=US, ST=MD, L=Baltimore, O=Test CA, Limited, CN=Test CA/emailAddress=test@example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (3072 bit) Modulus: 00:e2:e9:0e:9a:b8:52:d4:91:cf:ed:33:53:8e:35: ... d6:7d:ed:67:44:c3:65:38:5d:6c:94:e5:98:ab:8c: 72:1c:45:92:2c:88:a9:be:0b:f9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 34:66:39:7C:EC:8B:70:80:9E:6F:95:89:DB:B5:B9:B8:D8:F8:AF:A4 X509v3 Authority Key Identifier: keyid:34:66:39:7C:EC:8B:70:80:9E:6F:95:89:DB:B5:B9:B8:D8:F8:AF:A4 X509v3 Basic Constraints: critical CA:FALSE X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment, Certificate Sign X509v3 Subject Alternative Name: DNS:example.com, DNS:www.example.com, DNS:mail.example.com, DNS:ftp.example.com Signature Algorithm: sha256WithRSAEncryption 3b:28:fc:e3:b5:43:5a:d2:a0:b8:01:9b:fa:26:47:8e:5c:b7: ... 71:21:b9:1f:fa:30:19:8b:be:d2:19:5a:84:6c:81:82:95:ef: 8b:0a:bd:65:03:d1