español certificate openssl x509 pki

certificate - rfc 5280 español



OpenSSL versión V3 con nombre alternativo de sujeto (7)

¿Qué comando usó para hacer la solicitud de certificado CSR? ¿Qué comando usaste para hacer el archivo de certificado? Diferentes respuestas para diferentes circunstancias que conoces.

Tal vez no estas poniendo

subjectAltName = correo electrónico: copiar

en la sección

[v3_req]

Tal vez esté utilizando openssl x509 para generar el certificado, si es así debe usar

-archivo de extensión /etc/pki/tls/openssl.cnf

porque sin eso no usa tu archivo de configuración

También podría necesitar

-extensiones v3_req

interruptor de línea de comando

Estoy usando la herramienta de línea de comandos OpenSSL para generar un certificado autofirmado. Parece estar funcionando correctamente, excepto por dos problemas. No puedo crear un .cer con un Nombre alternativo del sujeto (crítico) y no he podido averiguar cómo crear un certificado que sea la Versión 3 (no estoy seguro de si esto es crítico todavía, pero preferiría aprender) cómo configurar la versión).

¿Alguien ha hecho esto exitosamente? El archivo de configuración predeterminado (.cfg) tiene una documentación aparentemente clara (ver a continuación):

"Esto es para subjectAltName y issuerAltname. Importe la dirección de correo electrónico. SubjectAltName = email: copy"

Sin embargo esto no funciona. Mi corazonada es que el nombre alternativo del sujeto no aparece b / c, no está presente en las especificaciones de V1, por lo que también estoy intentando establecer la versión.

Aquí está el archivo de configuración que estoy usando:

[ req ] default_bits = 2048 default_keyfile = privkey.pem distinguished_name = req_distinguished_name emailAddress = [email protected] req_extensions = v3_req x509_extensions = v3_ca [req_distinguished_name] C = [Press Enter to Continue] C_default = US C_min = 2 C_max = 2 O = [Press Enter to Continue] O_default = default 0.OU=[Press Enter to Continue] 0.OU_default = default 1.OU=[Press Enter to Continue] 1.OU_default = PKI 2.OU=[Press Enter to Continue] 2.OU_default = ABCD commonName = Public FQDN of server commonName_max = 64 [ v3_req ] basicConstraints = CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment [ v3_ca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always subjectAltName = email:[email protected] issuerAltName = issuer:copy



Aquí están los sencillos pasos para usted.

Al generar la CSR, debe usar -config y -extensiones y al generar el certificado, debe usar -extfile y -extensions

Aquí está el ejemplo

openssl req -new -nodes -keyout test.key -out test.csr -days 3650 -subj "/C=US/ST=SCA/L=SCA/O=Oracle/OU=Java/CN=test cert" -config /etc/pki/tls/openssl.cnf -extensions v3_req openssl x509 -req -days 3650 -in test.csr -CA cacert.pem -CAkey rootCA.key -CAcreateserial -out test.pem -extfile /etc/pki/tls/openssl.cnf -extensions v3_req

espero que esto ayude


Conseguí que funcionara con la siguiente versión (emailAddress se colocó incorrectamente):

[ req ] default_bits = 2048 default_keyfile = privkey.pem distinguished_name = req_distinguished_name req_extensions = v3_req x509_extensions = v3_ca [req_distinguished_name] C = [Press Enter to Continue] C_default = US C_min = 2 C_max = 2 O = [Press Enter to Continue] O_default = default 0.OU=[Press Enter to Continue] 0.OU_default = default 1.OU=[Press Enter to Continue] 1.OU_default = PKI 2.OU=[Press Enter to Continue] 2.OU_default = ABCD commonName = Public FQDN of server commonName_max = 64 emailAddress = [Press Enter to Continue] emailAddress_default = [email protected] [ v3_req ] basicConstraints = CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment [ v3_ca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always subjectAltName = email:[email protected] issuerAltName = issuer:copy

Notas:

  • Para generar el certificado que utilicé:

    openssl req -config req.cnf -new -nodes -out req.pem -x509

  • No he visto mucho uso para issuerAltname (si es así, me gustaría saber dónde).
  • Usar el issuer:always se recomienda para authorityKeyIdentifier .
  • Usando el email:copy ahora funciona con subjectAltName .
  • v3_req sección v3_req es superflua (así como la línea req_extensions .

Muy bien, ninguna de las otras respuestas en esta página funcionó para mí, e intenté cada una de ellas. Lo que funcionó para mí fue un pequeño truco:

Al solicitar el certificado:

-config ''<(cat /etc/ssl/openssl.cnf <(printf "[SAN]/nsubjectAltName=DNS:$SERVER"))'' -reqexts SAN

y al firmar el certificado:

-extfile ''<(cat /etc/ssl/openssl.cnf <(printf "[SAN]/nsubjectAltName=DNS:$SERVER"))'' -extensions SAN

Así que no hay confusión, aquí hay un script de trabajo que cubre todo desde el principio, incluida la creación de una autoridad de certificación:

# if the server name is undefined, lets default to ''Some-Server'' SERVER="${SERVER:-Some-Server}" CORPORATION=My-Corp GROUP=My-Corporate-Group CITY=City STATE=State COUNTRY=US CERT_AUTH_PASS=`openssl rand -base64 32` echo $CERT_AUTH_PASS > cert_auth_password CERT_AUTH_PASS=`cat cert_auth_password` # create the certificate authority openssl / req / -subj "/CN=$SERVER.ca/OU=$GROUP/O=$CORPORATION/L=$CITY/ST=$STATE/C=$COUNTRY" / -new / -x509 / -passout pass:$CERT_AUTH_PASS / -keyout ca-cert.key / -out ca-cert.crt / -days 36500 # create client private key (used to decrypt the cert we get from the CA) openssl genrsa -out $SERVER.key # create the CSR(Certitificate Signing Request) openssl / req / -new / -nodes / -subj "/CN=$SERVER/OU=$GROUP/O=$CORPORATION/L=$CITY/ST=$STATE/C=$COUNTRY" / -sha256 / -extensions v3_req / -reqexts SAN / -key $SERVER.key / -out $SERVER.csr / -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]/nsubjectAltName=DNS:$SERVER")) / -days 36500 # sign the certificate with the certificate authority openssl / x509 / -req / -days 36500 / -in $SERVER.csr / -CA ca-cert.crt / -CAkey ca-cert.key / -CAcreateserial / -out $SERVER.crt / -extfile <(cat /etc/ssl/openssl.cnf <(printf "[SAN]/nsubjectAltName=DNS:$SERVER")) / -extensions SAN / -passin pass:$CERT_AUTH_PASS

Luego podemos verificar que el nombre Alternativo del Asunto esté en el certificado final:

openssl x509 -in Some-Server.crt -text -noout

La sección pertinente es:

X509v3 extensions: X509v3 Subject Alternative Name: DNS:Some-Server

Así funcionó! Este es un certificado que será aceptado por todos los navegadores principales (incluido Chrome), siempre y cuando instale la autoridad de certificación en el navegador. Eso es ca-cert.crt que necesitará instalar.

Aquí hay una configuración de ejemplo para ngnx que le permitiría usar el certificado:

server { listen 443 ssl; listen [::]:443 ssl; server_name localhost:443; ssl_certificate /etc/ssl/certs/Some-Server.crt; ssl_certificate_key /etc/ssl/private/Some-Server.key; ssl_dhparam /etc/ssl/certs/https-dhparam.pem; location / { root /usr/share/nginx/html; index index.html index.htm; } }


Sé que este hilo es un poco viejo, pero en caso de que funcione para cualquiera en Windows, verifique que el archivo esté codificado en UTF-8; en mi caso, recibí un error que indicaba que había un error con el archivo .cnf, así lo abrió en Notepad ++ configuró la codificación del archivo en UTF-8, guardó y ejecutó el comando openssl de nuevo e hizo el truco.


Se requiere v3_req con la entrada subjectAltName en el archivo de configuración. El comando

openssl x509 ... -extfile openssl.cnf -extensions v3_req

insertará la SAN en el certificado.