Estaba probando dos configuraciones diferentes de Apache2.
En el primer caso, usé la lista ofrecida por enlace que ofrece un certificado gratuito. La lista se ve así:
SSLHonorCipherOrder on
SSLCompression off
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256
:ECDHE-ECDSA-AES128-GCM-SHA256
:ECDHE-RSA-AES256-GCM-SHA384
:ECDHE-ECDSA-AES256-GCM-SHA384
:DHE-RSA-AES128-GCM-SHA256
:DHE-DSS-AES128-GCM-SHA256
:kEDH+AESGCM
:ECDHE-RSA-AES128-SHA256
:ECDHE-ECDSA-AES128-SHA256
:ECDHE-RSA-AES128-SHA
:ECDHE-ECDSA-AES128-SHA
:ECDHE-RSA-AES256-SHA384
:ECDHE-ECDSA-AES256-SHA384
:ECDHE-RSA-AES256-SHA
:ECDHE-ECDSA-AES256-SHA
:DHE-RSA-AES128-SHA256
:DHE-RSA-AES128-SHA
:DHE-DSS-AES128-SHA256
:DHE-RSA-AES256-SHA256
:DHE-DSS-AES256-SHA
:DHE-RSA-AES256-SHA
:AES128-GCM-SHA256
:AES256-GCM-SHA384
:AES128-SHA256
:AES256-SHA256
:AES128-SHA
:AES256-SHA
:AES
:CAMELLIA
:DES-CBC3-SHA
:!aNULL
:!eNULL
:!EXPORT
:!DES
:!RC4
:!MD5
:!PSK
:!aECDH
:!EDH-DSS-DES-CBC3-SHA
:!EDH-RSA-DES-CBC3-SHA
:!KRB5-DES-CBC3-SHA
ADVERTENCIA: Se supone que la lista de cifrados es una línea larga en Apache2, pero para que sea legible aquí, la dividí con un cifrado por línea.
Cuando pruebo esa lista con
https://www.ssllabs.com/ssltest/analyze.html?d=<domain.tld>
me sale:
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) ECDH secp256r1 FS 128 (eq. 3072 bits RSA)
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030) ECDH secp256r1 FS 256 (eq. 3072 bits RSA)
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e) DH 2048 bits FS 128
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x9f) DH 2048 bits FS 256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027) ECDH secp256r1 FS 128 (eq. 3072 bits RSA)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013) ECDH secp256r1 FS 128 (eq. 3072 bits RSA)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028) ECDH secp256r1 FS 256 (eq. 3072 bits RSA)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014) ECDH secp256r1 FS 256 (eq. 3072 bits RSA)
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (0x67) DH 2048 bits FS 128
TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x33) DH 2048 bits FS 128
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (0x6b) DH 2048 bits FS 256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x39) DH 2048 bits FS 256
TLS_RSA_WITH_AES_128_GCM_SHA256 (0x9c) 128
TLS_RSA_WITH_AES_256_GCM_SHA384 (0x9d) 256
TLS_RSA_WITH_AES_128_CBC_SHA256 (0x3c) 128
TLS_RSA_WITH_AES_256_CBC_SHA256 (0x3d) 256
TLS_RSA_WITH_AES_128_CBC_SHA (0x2f) 128
TLS_RSA_WITH_AES_256_CBC_SHA (0x35) 256
TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (0x88) DH 2048 bits FS 256
TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (0x84) 256
TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (0x45) DH 2048 bits FS 128
TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (0x41) 128
TLS_RSA_WITH_3DES_EDE_CBC_SHA (0xa) 112
Ahora, entiendo el concepto de poner el DHE y el ECDHE primero. Estos están claramente marcados con "FS", que significa secreto en el futuro (es decir, sus mensajes se mantendrán secretos en el futuro, incluso si un pirata informático puede obtener su clave privada de alguna manera. Al menos hasta que los qubits sean una realidad).
Lo que me pregunto es la columna con los números "128" y luego "256". ¿Por qué pondríamos primero un cifrado con menos bits de cifrado? ¿El cifrado es seguro pero será más rápido porque necesita menos bits para cifrar los datos? O deberíamos tener todos los 256 primero, luego el 128, y finalmente el 112 (si queremos mantener ese feo ...)
¿O no entiendo bien ese número y la orden ya es tan buena como puede ser?
Más tarde probé con una configuración que obtuve al hacer una verificación de cumplimiento de PCI en un servidor y encontré una configuración que genera esa lista. La configuración se ve así:
SSLCipherSuite HIGH:MEDIUM:!ADH:!MD5:!aNULL:!eNULL:!LOW:!EXP:!RC4
Bastante simple! Sin embargo, esa configuración no admite la opción SSLHonerCipherOrder
. Ya sea que esa opción esté activada o no, se dice que el servidor no especifica la orden (lo que probablemente sea cierto).
En ese caso, el sitio web de Qualys SSL Labs termina clasificando los cifrados de la siguiente manera: todos los más pequeños primero (112) y luego el más grande último (256). ¿Sería eso lo que harían los navegadores? ¿Intenta obtener el menor número de bits para continuar con el cifrado? ¿No sería esa la forma menos segura de transmitir datos?
TLS_RSA_WITH_3DES_EDE_CBC_SHA (0xa) 112
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (0x16) DH 2048 bits FS 112
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (0xc012) ECDH sect571r1 FS 112 (eq. 15360 bits RSA)
TLS_RSA_WITH_AES_128_CBC_SHA (0x2f) 128
TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x33) DH 2048 bits FS 128
TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (0x41) 128
TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (0x45) DH 2048 bits FS 128
TLS_RSA_WITH_SEED_CBC_SHA (0x96) 128
TLS_DHE_RSA_WITH_SEED_CBC_SHA (0x9a) DH 2048 bits FS 128
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013) ECDH sect571r1 FS 128 (eq. 15360 bits RSA)
TLS_RSA_WITH_AES_128_CBC_SHA256 (0x3c) 128
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (0x67) DH 2048 bits FS 128
TLS_RSA_WITH_AES_128_GCM_SHA256 (0x9c) 128
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e) DH 2048 bits FS 128
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027) ECDH sect571r1 FS 128 (eq. 15360 bits RSA)
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) ECDH sect571r1 FS 128 (eq. 15360 bits RSA)
TLS_RSA_WITH_AES_256_CBC_SHA (0x35) 256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x39) DH 2048 bits FS 256
TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (0x84) 256
TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (0x88) DH 2048 bits FS 256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014) ECDH sect571r1 FS 256 (eq. 15360 bits RSA)
TLS_RSA_WITH_AES_256_CBC_SHA256 (0x3d) 256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (0x6b) DH 2048 bits FS 256
TLS_RSA_WITH_AES_256_GCM_SHA384 (0x9d) 256
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x9f) DH 2048 bits FS 256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028) ECDH sect571r1 FS 256 (eq. 15360 bits RSA)
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030) ECDH sect571r1 FS 256 (eq. 15360 bits RSA)