Cuando realizamos una implementación de seguridad SSL en una página o aplicación web, no solo debemos quedarnos con que aparezca el https en la url sino que debemos intentar ir más allá, hace unos años leí que un proveedor de certificados estaba vendiendo certificados con llaves iguales, por error en la producción de ellos, por ende era posible negociar con una página utilizando otro certificado, el cual debería tener llaves distintas.
Los primero que debemos conocer es que es un CipherSuite?
Los CipherSuite son conjuntos de cifrado con los que interactua nuestra aplicación web, estos conjuntos van por escala de bits, teniendo cifrados bajos de 32 bits, medios de 64 bits y altos de 128 bits en adelante.
Debido a que con el tiempo se van descubriendo vulnerabilidades en algoritmos de cifrado, es recomendable actualizar nuestros conjuntos de cifrado cipher suite para tener siempre la mejor seguridad posible.
Se compone de un estructura para crear una negociación segura según el algoritmo que se implemente, lo podemos ver reflejado en la siguiente imagen:

- Protocol: Esta es la primer sección del cipher, se compone de los protocolos TLS o SSL.
- Key Exchange: Es el algoritmos para la encriptación de los datos a enviar durante nuestro intercambio de datos.
- Signature: Este algoritmo se utilizará para validar si los datos que se reciben o se envian entre el cliente y el servidor no han sido alterados, validando el tipo de algoritmo de firma que se haya utilizado.
- Bulk Encryption: Esta sección se utiliza para específicar el tipo de llave, su longitud y el modo por el cual se enviarán los datos desde el servidor al cliente.
- Message Authentication o Hash: Nos indicará si la llave o cadena entrante y saliente es integra o bien fue manipulada, dependiendo el tamaño del hash la llave puede ser de gran longitud o muy pequeña.
- Elliptic Curve: En esta sección se colocará el tipo de curva elíptica para enviar nuestra llave privada y conceder acceso o una respuesta segura, por el tamaño y la elección el procesamiento es diferente, actualmente solo podemos elegir 2 opciones P256 o P384
Debemos tener en cuenta que existen infinidad de configuraciones de cipher para nuestros servidores, siempre hay que verificar que los CipherSuite, si son muy restrictivos, podrían impedir el acceso de ciertos servicios cotidianos a nuestra aplicación web, ya que impediría el intercambio de llaves, estos normalmente termina resultando en un error de handshake.
Por ende mi recomendación es quitar el cipher suite, todos aquellos algoritmos poco seguros que representen un riesgo o los cuales se les haya descubierto una vulnerabilidad, tales como:
- MD4 y MD5
- DES (DEA)
- TDEA (2TDEA)
- SKIPJACK
- SHA1
- RIPEMD-128
- RC4
- 3DES
O cualquier algoritmo con una longitud menor a 112 bits ya que estos pueden representar vulnerabilidades en nuestros sitios web.
Algunos algoritmos son buenos implementar y mantener, al menos hasta que no se les descubra alguna vulnerabilidad son:
- AES
- RSA
- SHA256
- DSA
- Toda la familia SHA-2 y SHA-3
O cualquier algoritmo con longitud mayor a 128 bits.
Configurando un CipherSuite que acepte solo algoritmos de longitudes igual o mayores a 128 bits en nuestro OHS
Para verificar nuestro CipherSuite debemos buscar el archivo ssl.conf.
Dentro encontraremos una etiqueta llamada SSLCipherSuite junto con una lista de algoritmos de cifrado como la siguiente:

Lo que haremos será configurar nuestro CipherSuite de una manera muy restrictiva:

SSLCipherSuite HIGH:!MD5:!RC4:!3DES
Con HIGH indicamos que se acepten solo algoritmos con longitudes iguales o mayores a 128 bits, los !MD5:!RC4:!3DES van acompañador de un ! el cual le indicará al servidor que no acepte este tipo de algoritmos de cifrado, de esta manera podemos seguir agregando más restricciones para mantener más seguro nuestro servidor.
Nota: Debemos tener en cuenta que dependiendo la cantidad de servicios externos que interactuen con nuestra aplicación, es posible que el acceso se límite o sea restringido, por ende dependiendo el sitio web es será necesario bajar el nivel cifrado que utilicemos en nuestro CipherSuite.
Por últimos tendremos 2 parámetros más:
- SSLProtocol: Indicaremos cuales protocolos serán aceptados en nuestro servidor, ya sea TLS, SSL o DTL, podemos añadir o remover protocolos usan los símbolos + o – delante del protocolo.
- SSLHonorCipherOrder: Al establecerlo en On estamos forzando el uso del cifrado preferente del servidor y no del cliente, por ende si se un cliente no realiza la petición usando ese cifrado, el servidor lo rechazará.
Estos los configuraremos de la siguiente forma dentro del mismo archivo ssl.conf:
SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2 SSLHonorCipherOrder On
Guardamos el archivo y reiniciamos nuestro OHS, de esta manera hemos aumentado la seguridad en nuestro sitio web con un cifrado más robusto.