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

115

Estoy tratando de generar un certificado autofirmado con OpenSSL con SubjectAltName en él. Mientras estoy generando el csr para el certificado, creo que tengo que usar 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 sintaxis exacta?

mohanjot
fuente
2
Consulte también ¿Cómo crear un certificado autofirmado con openssl? Proporciona la información para crear un certificado con el nombre alternativo del sujeto y le indica otras reglas que se aplican para que el certificado tenga la mayor probabilidad de éxito con los navegadores y otros agentes de usuario.
jww
la respuesta al final de este hilo ( stackoverflow.com/questions/27294589/… ) usando certificatetools.com le dará un buen resultado y un archivo cnf utilizable
James Nelson

Respuestas:

164

¿Alguien puede ayudarme con la sintaxis exacta?

Es un proceso de tres pasos e implica modificar el openssl.cnfarchivo. Es posible que pueda hacerlo solo con opciones de línea de comando, pero yo no lo hago de esa manera.

Encuentra tu openssl.cnfarchivo. Probablemente esté ubicado 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.cnfes usado por el programa integrado openssl. En sistemas Debian recientes se encuentra en/etc/ssl/openssl.cnf

Puede determinar cuál openssl.cnfse está utilizando agregando un XXXarchivo falso y ver si se opensslahoga.


Primero, modifique los reqparámetros. Agregue una alternate_namessección openssl.cnfcon los nombres que desea usar. No hay alternate_namessecciones existentes , 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 keyUsagea lo siguiente en [ v3_ca ]:

keyUsage = digitalSignature, keyEncipherment

digitalSignaturey keyEnciphermentson tarifa estándar para un certificado de servidor. No se preocupe nonRepudiation. Es una parte inútil ideada por chicos / chicas informáticos 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 forma rápida y flexible, por lo que probablemente no importa qué uso de clave proporcione.


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

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

Y cámbielo a:

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

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


En tercer lugar, genere su certificado 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/[email protected]
        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/[email protected]
        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
jww
fuente
7
Acabo de copiar ese archivo openssl y lo ajusté localmente. Luego generó todo con: openssl genrsa -out cert.key 3072 -nodes openssl req -new -x509 -key cert.key -sha256 -config openssl.cnf -out cert.crt -days 730 -subj "/C=US/ST=private/L=province/O=city/CN=hostname.example.com"
stwienert
7
También hay un buen truco para hacer esto más flexible usando las variables de entorno descritas aquí : subjectAltName=$ENV::ALTNAME(y establezca env. Var ALTNAME=DNS:example.com,DNS:other.example.net).
Bruno
6
Tenga en cuenta que usa en IPlugar de DNSfor alternate_namessi está trabajando con una dirección IP. También puede copiar el archivo de configuración localmente y luego especificarlo en la línea de comando openssl con -config my_config.cnf. Y puede que tengas que descomentar req_extensions = v3_req.
Adversus
5
Nunca logré que esto funcionara en OSX, pero el uso de la plantilla req.conf en este enlace funcionó como un encanto: support.citrix.com/article/CTX135602 ( Extraería los detalles en una respuesta, pero esta pregunta se ha cerrado sin ayuda )
rymo
3
por alguna razón, no le gusta el subjectAltName = @alternate_names en la sección v3_ca. ¿Podría ser un error tipográfico? Aquí está el error que obtengo: error: 22097069: rutinas X509 V3: DO_EXT_NCONF: cadena de extensión no válida: v3_conf.c: 139: nombre = subjectAltName, sección = @ nombres_alternativos 140487468840608: error: 22098080: rutinas X509 V3: X509V3_EXT_nconf: error en la extensión: v3_conf.c: 93: name = subjectAltName, value = @ alternate_names
James Nelson