La forma correcta de implementar SSL en localhost

10

¿Alguien podría sugerir una forma moderna de generar certificados autofirmados para implementarse en localhost, que sería aceptado por Chrome y Mozilla?

Probé la generación openssl, sin embargo, Mozilla se queja de que el emisor no es de confianza.

Centos 7, nginx

Tarlan Mammadzada
fuente
Usa Let's Encrypt .
Thomas
2
Es dominio local,
encriptemos
2
Vaya al sitio, haga clic en avanzado y haga clic en agregar excepción.
Richard Smith
1
Desea que parezca seguro, necesitará una CA autofirmada y la usará para firmar el certificado de su servidor, luego puede agregar la CA al almacén de confianza del navegador.
Richard Smith
1
Parece que Firefox ha dejado de aceptar certificados autofirmados. Como dice @RichardSmith, deberá utilizar una Autoridad de certificación para generar sus certificados. Antes de sumergirse en ese campo minado, es posible que necesite estudiar las implicaciones de seguridad de operar su propia Autoridad.
garethTheRed

Respuestas:

9

Advertencia: ¡Antes de sumergirse en el campo minado de administrar su propia Autoridad de Certificación, es posible que necesite estudiar las implicaciones de seguridad!

Pero si es necesario, sigue leyendo para obtener una CA rápida y sucia que te dará https://localhost/sin un mensaje de advertencia ...

Cree el siguiente archivo de texto:

# OpenSSL configuration for Root CA

[ req ]

prompt             = no
string_mask        = default

# The size of the keys in bits:
default_bits       = 2048
distinguished_name = req_distinguished_name
x509_extensions    = x509_ext

[ req_distinguished_name ]

# Note that the following are in 'reverse order' to what you'd expect to see.

countryName = gb
organizationName = Test
commonName = Test Root CA

[ x509_ext ]

basicConstraints=critical,CA:true,pathlen:0
keyUsage=critical,keyCertSign,cRLSign

Guardar como root.cnfgenerar la solicitud con:

$ openssl req -x509 -new -keyout root.key -out root.cer -config root.cnf

Esto creará su certificado de CA raíz ( root.cer) y su clave privada de CA raíz ( root.key) que debe mantener en privado. Solicitará una contraseña para la clave privada: asegúrese de elegir una segura.

Ahora cree un archivo de configuración para el certificado del servidor:

# OpenSSL configuration for end-entity cert

[ req ]

prompt             = no
string_mask        = default

# The size of the keys in bits:
default_bits       = 2048
distinguished_name = req_distinguished_name

x509_extensions    = x509_ext

[ req_distinguished_name ]

# Note that the following are in 'reverse order' to what you'd expect to see.

countryName = gb
organizationName = Test
commonName = localhost

[ x509_ext ]

keyUsage=critical,digitalSignature,keyAgreement

subjectAltName = @alt_names

# Multiple Alternate Names are possible
[alt_names]
DNS.1 = localhost
# DNS.2 = altName.example.com

Guárdelo como server.cnfy genere la solicitud con:

openssl req -nodes -new -keyout server.key -out server.csr -config server.cnf

Lo anterior generará otra clave privada ( server.key) que debe proteger. En este caso, la clave no está protegida por contraseña, pero puede agregar una contraseña eliminando la -nodesopción.

Finalmente, firme la solicitud con su nueva CA raíz y extensiones del server.cnfarchivo (por conveniencia):

$ openssl x509 -req -in server.csr -CA root.cer -CAkey root.key -set_serial 123 -out server.cer -extfile server.cnf -extensions x509_ext

Nota: elija cualquier número aleatorio para la -set_serialopción.

Le pedirá la contraseña que ingresó cuando generó la CA raíz.

Se server.cergenerará un certificado de servidor ( ).

Ahora, agregue el certificado de CA raíz ( root.cer) al almacén de confianza de Firefox y ejecute una prueba con:

$ sudo openssl s_server -key server.key -cert server.cer -accept 443 -www

Nota: Puede obtener errores si ya tiene un servidor en ejecución en el puerto 443. En ese caso, detenga el servidor en ejecución o cambie el número de puerto anterior a otro puerto no utilizado.

Cuando navega https://localhost(o https://localhost:<port>si cambió el número de puerto anterior) con Firefox, ahora no debería ver ninguna advertencia y se le presentará una lista de cifrados que su instalación de OpenSSL puede ofrecer.

Una vez que esté satisfecho con los resultados, agregue el server.keyy server.cera su servidor web y configúrelo en consecuencia.

garethTheRed
fuente
1
Hay un error tipográfico; stinguished_namedebería serdistinguished_name
user281357