Dentro de las tareas criptográficas necesarias para realizar comunicaciones seguras están los algoritmos de resumen digital o hashing. Uno de los más utilizados desde hace varios lustros es el algoritmo SHA-1.

El problema es que este algoritmo ha sido ya vapuleado por algunos expertos en seguridad a partir de 2004, y hoy en día se considera inseguro, por lo que la mayor parte de fabricantes de navegadores y otros sistemas han anunciado que irán dejando de soportarlo paulatinamente:

Lo que hay que hacer es utilizar SHA-2 en cualquiera de sus 6 variantes, y más en concreto se suele utilizar SHA-256.

El consenso general es que a partir del día 1 de Enero de 2017 los navegadores que se encuentran con una conexión segura SSL basada en el algoritmo SHA-1 pasarán a considerarla insegura y mostrarán un aviso de seguridad.

Es más, hoy en día esto ya está ocurriendo puesto que Chrome, si despliegas la información del sitio pulsando en el candado, te advierte de que el sitio está usando un conjunto de cifrado obsoleto:

Certificado-SSL-Hacienda-Obsoleto

En el caso de nuestra querida agencia tributaria encima es que ni siquiera proporciona información sobre transparencia de certificados, por lo que además el icono del candado muestra ya una advertencia en la barra de direcciones. La Administración siempre por delante, ya se sabe...

Bien, el caso es que dentro de poco si tu certificado SSL no está correctamente generado para poder utilizar algoritmos de cifrado y hashing modernos, vas a tener un problema.

Esto implica fundamentalmente dos cosas:

  1. Permitir únicamente el uso de protocolos seguros en el servidor: básicamente deshabilitar SSL 2.0 y SSL 3.0 y recurrir a TLS, mejor a una de sus versiones más recientes (la 1.1 o la 1.2). Fíjate que en el caso de Hacienda, sí que usan TLS 1.2, pero como utilizan SHA1, Chrome advierte igualmente de que es un conjunto de cifrado obsoleto. En Enero de 2017 simplemente lo marcará como inseguro.
  2. Solicitar un certificado SSL indicando que queremos utilizar alguna variante de SHA-2. Esto es precisamente lo que vamos a ver en este post.

Si utilizas Internet Information Server en algún sistema que no sea con Windows Server 2012 (que lleva IIS 8.x), no podrás solicitar el certificado de la manera habitual. De hecho, si generas un certificado desde la opción correspondiente del IIS Manager, cuando vayas a comprarlo lo más probable es que el proveedor te avise y te diga que debes hacer la solicitud con SHA-2. Por ejemplo, si copias y pegas tu solicitud en esta página de Symantec, te dirá qué tipo de solicitud estás haciendo (pulsa para aumentar):

SSL-SHA-Cert-SHA1

En este caso, como vemos, se está solicitando con SHA-1, que es lo que utiliza por defecto Internet Information Server 7.x. Conviene usar esta herramienta gratuita para verificar nuestra solicitud antes de comprar el certificado.

Entonces, si IIS genera una petición de certificado con SHA-1 ¿cómo podemos obtener una solicitud apropiada con SHA-2?.

Para ello debes utilizar la consola de gestión del sistema directamente, y hacer caso omiso de la administración de Internet Information Server.

Primeramente abre la consola de gestión del sistema buscando el ejecutable MMC.exe o bien pulsando Windows+R y escribiendo "MMC.exe" en él.

En la consola vete al menú "Archivo· Agregar o quitar snap-in" y elige el de "Certificados". Cuando añadas ese snap-in asegúrate de escoger "Cuenta de la máquina" ("Computer Account") en el almacén de certificados que quieres examinar:

MMC-Certificados

Ahora que ya lo tienes añadido, abre el almacén "personal", que en este caso se corresponde a los certificados del sistema, pulsa con el botón derecho sobre ese nodo y escoge la opción de "Crear solicitud personalizada" debajo del submenú de "Operaciones avanzadas":

SSL-SHA-PedirCert

De este modo podremos personalizar al máximo la solicitud de certificado. Vamos a verlo...

En el asistente que sale dale a "Siguiente" tres veces sin cambiar ningún ajuste, hasta que llegas a esta pantalla:

SSL-SHA-PedirCert2

Despliega esa sección "Custom Request" y pulsa el botón "Propiedades" tal y como está marcado en la figura. Se abrirá una nueva ventana:

SSL-SHA-PedirCert3

En la información general introduce el nombre "amigable" del certificado (yo suelo poner el nombre del dominio para el que se va utilizar), y en la descripción algo que tenga sentido para ti (yo suelo poner el dominio también).

Cambia a la pestaña "Asunto":

SSL-SHA-PedirCert4

En esta deberás introducir los datos que van a verse reflejados luego en el certificado. Es un paso muy importante. En la lista superior debes añadir todos los campos que se ven en la figura anterior, es decir:

  • El nombre común (CN), que es el nombre de dominio al que vamos a asociar el certificado.
  • La organización (O): el nombre de la empresa o entidad a nombre de la que se solicita el certificado. Es el que luego aparecerá en la información del certificado en el navegador de los usuarios, y es el que se va a tener que verificar para asociarlo al certificado y verificar su autenticidad.
  • La unidad organizativa (OU) de la empresa a la que pertenece el certificado. Puedes poner cualquier cosa que tenga sentido.
  • La localidad (L): el nombre de la ciudad en la que está tu negocio.
  • El estado (S): la provincia o región a la que pertenece la ciudad anterior.
  • El país (C): el código internacional que describe al país en el que está la organización. OJO con esto: si no pones un código internacional correcto no te podrás solicitar el certificado. Por ejemplo, en el caso e España el código es "ES" y no puedes poner "Spain" ni "España".

En la lista de la parte inferior es muy importante incluir el nombre DNS para el que solicitas el certificado. Es decir, el nombre de dominio completo para el que lo estás solicitando. Escoge la opción "DNS" en la lista desplegable, escribe el nombre del dominio y pulsa en "Añadir". Si quieres solicitar un certificado múltiples, válido para varios dominios, puedes repetir esta operación varias veces. OJO, porque te cobrarán varias veces también pues es como si pidieras varios certificados.

Ahora pasa a la pestaña "Clave privada", la última de esta ventana:

SSL-SHA-PedirCert5

En esta se encuentra el "quid" de la cuestión. Es en donde vas a poder especificar las opciones del conjunto de cifrado del certificado que quieres solicitar. Las diferentes opciones se encuentras replegadas en grupos. Despliega el grupo de "Opciones de clave" y el de "Selecciona algoritmo de hash", como se muestra en la figura anterior.

Escoge un tamaño de clave apropiado. Por defecto viene seleccionada una longitud de 1024 bits. Yo te recomiendo que escojas 2048, que es más seguro y no carga demasiado el servidor. Cuánto más grande sea el tamaño de la clave más segura va a ser pero más recursos computacionales necesitarás en el servidor para atender las peticiones. 2048 es un buen equilibrio entre seguridad (muy alta) y rendimiento.

El algoritmo de hash debe ser uno de los del tipo SHA-2, y en concreto el más recomendable es el SHA256, como se ve en la figura.

Acepta los cambios pulsando "Aceptar" y vuelve al asistente original. Al darle a siguiente podrás guardar la petición a disco y usarla para poder solicitar tu certificado en cualquier entidad certificadora de las muchas que existen on-line:

SSL-SHA-PedirCert6

Este archivo, aunque tiene extensión .req, no es más que un archivo de texto con información sobre la solicitud en formato Base-64. Tienes que abrirlo para poder pegar esta información en la web de la entidad certificadora (te la pedirá en un paso del proceso de compra). Si lo abres con el bloc de notas verás algo similar a esto:

SSL-SHA-PedirCert7

Si quieres, antes de solicitar el certificado en la web de la entidad certificadora, puedes comprobar que todos sus datos son correctos usando la web de Symantec que indiqué al principio (o cualquier otra similar):

SSL-SHA-Cert-SHA2

En este caso vemos que, en efecto, tenemos un algoritmo de hashing de tipo SHA-2, tal y como hemos solicitado, con una clave de cifrado de 2048 bits de longitud. ¡Perfecto!

Ahora ya solo tienes que seguir el proceso habitual de compra del certificado, verificación de identidad de la empresa/organización, y montaje en el servidor. Asegúrate de todos modos de descargar el certificado para SHA-256 ya que algunas entidades certificadoras te seguirán ofreciendo el SHA-1.

Puedes comprobar si el nuevo certificado cumple con los requisitos de seguridad más apropiados usando esta herramienta Open Source de nombre tan curioso:

https://shaaaaaaaaaaaaa.com/

En un próximo post contaré cómo podemos cambiar el orden de los protocolos de cifrado en el servidor para que se prioricen los más seguros frente a los otros (o incluso se eliminen los inseguros).

¡Espero que te sea útil!

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor

Escrito por un humano, no por una IA