Solución certificados auto-firmados dando problemas

Después de varias semanas de trabajo intenso puedo aprovechar un rato para explicar que tras integrar nuestro certificado auto-firmado de manera local, las nuevas versiones de Chrome (58+) y Firefox (53+) pueden negar el acceso a las páginas que tengan el certificado sin incluir Subject Alt NameEstas actualizaciones son para evitar que el ataque Punycode haga efecto.

No importa si el certificado está añadido al navegador, ni si lo tenemos agregado al Keychain (Mac OS X) como System o Root configurado en “Confiar siempre”. Es una decisión que toman los navegadores.

Importante:

Estos certificados NO son recomendables para ambientes de producción, están pensados para ambientes de desarrollo. La mayoría de los navegadores no reconocerían que este certificado haya sido emitido por una entidad confiable (como Verisign o GoDaddy), e impedirían el acceso a la página.

 

Problema de Chrome v57 con los certificados sin AltName

 

¿Cómo resolver este problema?

La única solución es rehacer los certificados que tengamos incluyendo una configuración especial para cada dominio. Para esto, debemos localizar nuestro archivo de configuración de OpenSSL, llamado openssl.cnfUna vez lo tengamos localizado, es posible que esté bloqueado contra escritura, pero no importa, únicamente tenemos que copiar todo el contenido y crear un nuevo archivo llamado, por ejemplo, openssl_tu-dominio.dev.cnf y guardarlo en la carpeta donde vayamos a generar los archivos del certificado.

En el archivo de configuración que vayamos a usar, debemos hacer lo siguiente:

  •  Al final del archivo añadimos:
[ alternate_names ]

DNS.1 = tu-dominio.dev
DNS.2 = www.tu-dominio.dev
  •  Justo después del bloque [ v3_ca ] añadimos:
subjectAltName = @alternate_names
  • Buscamos la siguiente línea y eliminamos el numeral (#) para que deje de ser un comentario:
# copy_extensions = copy

Ahora creamos el nuevo certificado de la siguiente manera:

openssl req -config /ruta/del/archivo/openssl_tu-dominio.dev.cnf -new -x509 -sha512 -newkey rsa:2048 -nodes -keyout /ruta/del/archivo/key.pem -days 365 -out /ruta/del/archivo/cert.pem

Breve explicación de los comandos:

  • req: Realiza la petición para crear un certificado PKCS#10 (un estándar, ver RFC 2986).
  • -config [archivo de configuración]: Requiere el archivo de configuración desde el cuál vamos a obtener la información del Subject Alternative Name.
  • -new: Genera un nuevo certificado, en caso de no usarlo se generaría una clave privada RSA con la configuración hecha en el archivo de configuración.
  • -x509: Utilidad para mostrar y firmar certificados.
  • -sha512: Se usa este hash para el message digest. Otras opciones son: sha, sha1, mdc2, ripemd160, sha224, sha256, sha384, md2, md4, md5 y dss1
    Nota: No se recomienda el uso de sha1 ni de md5 por la probabilidad de colisión de esos hashes.
  • -newkey: Crea una petición de nuevo certificado y una nueva clave privada.
  • rsa:2048: Define el tamaño de la clave tipo RSA. Si este paso se omite, OpenSSL usará el tamaño en bits definido desde el archivo de configuración que estemos usando (por defecto es de 1024 bits).
  • -nodes: Especifica que la clave privada no será encriptada, por lo que no nos pedirá contraseña.
  • -keyout [ruta y nombre del archivo]: Define dónde y con qué nombre se escribirá la nueva clave privada.
  • -days [número]: Cantidad de días que el certificado será válido. Si no se especifica, por defecto será válido durante 30 días.
  • -out [ruta y nombre del archivo]: Define dónde y con qué nombre se escribirá el certificado.

Una vez hecho esto, simplemente debemos cargar el certificado en el navegador o en el Keychain de Mac (como System) y ya tendríamos nuestra web-app local asegurada con SSL/TLS.

Por último debemos editar los cambios en el archivo httpd-vhosts.conf para añadir el certificado y la clave privada:

SSLCertificateFile "/ruta/hacia/cert.pem"
SSLCertificateKeyFile "/ruta/hacia/key.pem"

Conclusión:

Fue una actualización general en los navegadores para ofrecer mejor seguridad, y rehacer los certificados no es tan difícil. Es importante recordar que estos certificados son de uso local y para ambientes de desarrollo.

Espero que el tutorial haya sido de utilidad. Nos leemos, ¡saludos!

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s