
Administro algunos sitios web y uno de ellos obtuvo una calificación de seguridad deficiente (del cuadro de mando de la segunda). Tengo un servidor administrado, así que pedí ayuda a los chicos de TI, pero también me gustaría entender este problema un poco más.
El problema es que existen conjuntos de cifrado TLS1.0 y TLS1.1 antiguos, como:
TLS_RSA_WITH_IDEA_CBC_SHA (0x0007)
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_3DES_EDE_CBC_SHA
Lo primero que pensé es que deben estar ubicados en los archivos de configuración de OpenSSL. Pero después de algunos tutoriales, supongo que se refiere a la configuración de Apache. Los httpd.conf
(y los hosts virtuales) no tienen conjuntos de cifrado configurados explícitamente. Pero lo incluido httpd-ssl.conf
tiene algo.
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder on
SSLCipherSuite ECDH+AESGCM:ECDH+CHACHA20:ECDH+AES256:!LOW:!MEDIUM:!3DES:!aNULL:!eNULL:!ADH:!DSS!EXP:!MD5:!PSK:!RC4:!SRP
Lo que no entiendo actualmente: ¿Es este el lugar correcto? Quizás no o por qué esto se lee de manera diferente.
Leí en ciphersuite.info que los primeros de arriba son nombres de IANA (?) y hay nombres de OpenSSL. ¿Pero qué es ECDH+AESGCM
por ejemplo?
Podría necesitar alguna orientación sobre dónde buscar a continuación. No quiero copiar y pegar información, pero entender un poco más sobre este tema. Sin embargo, no soy el encargado de seguridad ni el de TI, así que prefiero no leer un libro de 300 páginas :-/
Respuesta1
Esta SSLCipherSuite
es la directiva correcta para configurar los algoritmos criptográficos que deben usarse. En TLS 1.2, se espera que establezca una combinación de cuatro algoritmos (llamado conjunto de cifrado):
- Un algoritmo de intercambio de claves que se utiliza para configurar un secreto compartido entre el cliente y el servidor. A partir del secreto, ambas partes pueden derivar una clave para el cifrado simétrico.
- Un algoritmo de firma para el intercambio de claves.
- Un algoritmo de clave simétrica para cifrar y descifrar los datos que deben transmitirse.
- Un algoritmo hash que se utiliza para garantizar la integridad de los mensajes (a través de un código de autenticación de mensajes) o construir un generador de números pseudoaleatorios criptográficamente seguro.
Cada conjunto de cifrado tiene un identificador únicoregistrado a través de la IANAy empezando por TLS_
. Por ejemplo, hay TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
lo que significa:
- El algoritmo de intercambio de claves es DHE, es decir, intercambio de claves Diffie-Hellman con claves efímeras.
- El algoritmo de firma es RSA.
- El algoritmo de criptografía simétrica es AES con claves de 128 bits en modo GCM.
- El algoritmo hash es SHA-256.
OpenSSL como proveedor de una implementación TLS concreta le permite elegir conjuntos de cifrado de IANA a través de unformato personalizado llamado "lista de cifrado". Este formato admite reglas de selección complejas, como ECDH+AESGCM
la que representa todos los conjuntos de cifrado que contienen tanto algoritmos ECDH
(para intercambio de claves) como AESGCM
(para cifrado simétrico). Puede verificar los conjuntos de cifrado exactos que obtiene con el comando openssl ciphers "ECDH+AESGCM"
. En mi caso, la lista incluye, por ejemplo, el conjunto de cifrado TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
(o como lo llama OpenSSL ECDHE-ECDSA-AES128-GCM-SHA256
).
La cuerda ECDH+AESGCM
en sí esnoun conjunto de cifrado. Es una regla de selección específica de OpenSSL para conjuntos de cifrado.
En la práctica, usaría una lista concreta de conjuntos de cifrado seguros, por ejemplo, elrecomendaciones de Mozilla. Con las reglas de selección de OpenSSL, existe el riesgo de que incluya conjuntos de cifrado que en realidad no pretendía (aunque siempre puede verificar el resultado con el openssl ciphers
comando mencionado anteriormente).