Tengo mi propio servidor (donde lo estoy ejecutando Apache/2.4.27
), y hoy me di cuenta de que (Brave y Google Chrome, diferentes computadoras) recibo de mis sitios web este error;
This site can’t provide a secure connection
mywebsite.com sent an invalid response.
ERR_SSL_PROTOCOL_ERROR
Y lo extraño es que recibo este error cada quinto clic en mi sitio web.
Desde mi archivo conf:
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/mywebsite/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mywebsite/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/mywebsite/chain.pem
SSLCompression off
de options-ssl-apache.conf
;
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLHonorCipherOrder on
SSLCompression off
He comprobado el archivo de registro del sitio web pero nada, tampoco nada aquí; /var/log/apache2/error.log
Estoy tratando de averiguar qué está causando este error, alguna idea de dónde puedo encontrar más información o incluso mejor, ¿cómo resolver este problema?
EDITAR:
Si lo intento openssl s_client -connect mywebsite.com:443
, volverá:
Estoy usando: OpenSSL 1.1.0f
CONNECTED(00000003)
...
3073276480:error:1408F119:SSL routines:ssl3_get_record:decryption failed or bad record mac:../ssl/record/ssl3_record.c:469:
OTRA EDICIÓN:
Como @quadruplebucky sugirió, cambié options-ssl-apache.conf a:
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SSLv3:!SSLv2:!TLSv1
SSLHonorCipherOrder on
SSLCompression off
#SSLSessionTickets off
También intenté agregar SSLProtocol all -SSLv2 -SSLv3
a mi archivo de conf virtualhost, y al mismo tiempo cambié un par de cosas aquí;/etc/apache2/mods-available/ssl.conf
#SSLCipherSuite HIGH:!aNULL
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SSLv3:!SSLv2:!TLSv1
SSLHonorCipherOrder on
# The protocols to enable.
# Available values: all, SSLv3, TLSv1, TLSv1.1, TLSv1.2
# SSL v2 is no longer supported
SSLProtocol all -SSLv2 -SSLv3
EDITAR:
Después de cambiar LogLevel en Info
él devuelve:
[Sat Jul 08 13:34:53.374307 2017] [ssl:info] [pid 8710] [client] AH02008: SSL library error 1 in handshake (server mywebsite:443)
[Sat Jul 08 13:34:53.374717 2017] [ssl:info] [pid 8710] SSL Library Error: error:140940F4:SSL routines:ssl3_read_bytes:unexpected message
[Sat Jul 08 13:34:53.374750 2017] [ssl:info] [pid 8710] [client] AH01998: Connection closed to child 1 with abortive shutdown (server mywebsite:443)
EDITAR:
Si ejecuto con la opción -crlf, así:
openssl s_client -crlf -connect mywebsite:443
¿No obtengo ningún error?
Una cosa más si cambio LogLevel para depurar, antes de ese error obtengo esto:
[Tue Jul 11 23:00:38.641568 2017] [core:debug] [pid 26561] protocol.c(1273): [client 188.64.25.162:23165] AH00566: request failed: malformed request line
[Tue Jul 11 23:00:38.641634 2017] [headers:debug] [pid 26561] mod_headers.c(900): AH01503: headers: ap_headers_error_filter()
Entonces, después de esto, ese mismo error sucederá:
SSL Library Error: error:140940F4:SSL routines:ssl3_read_bytes:unexpected message
openssl version
OpenSSL 1.1.0f 25 May 2017
fuente
ssl3*
ySSL3*
en OpenSSL también se usan para TLS (1.0 a 1.2) debido a las similitudes técnicas entre esos protocolos. user134969: 'longitud demasiado corta también debe Nunca ser causado por cualquier configuración. Si eso es repetible, intente obtener uns_client -debug
(con RSA simple-cipher
si no lo hizo en el servidor) y captura de wirehark para el mismo evento para que podamos ver los datos de cable reales y compararlos con lo que ve el programa.Respuestas:
A partir de ese error, no puede distinguir si su servidor está negociando SSLv3 o TLSv1 (es posible que desee ver esta pregunta en Unix y Linux y asegurarse de que esté deshabilitada en todas partes en Apache ...) --- el 1.1.0f el código fuente aquí en GitHub borra deliberadamente los dos ...
Por lo tanto, es posible que desee reordenar su conjunto de cifrado:
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SSLv3:!SSLv2:!TLSv1
Esta publicación en askubuntu sobre la vulnerabilidad POODLE tiene una excelente lista de recursos para la inspección y fontanería SSL.
El generador de configuración de Mozilla es un excelente servicio público.
El comentario "obteniendo este error cada quinto clic" es un poco extraño. ¿Te refieres a los clics , o cada quinta línea es una mala solicitud en los registros? Intente iniciar apache de un solo subproceso (el indicador -X) y vea si eso hace lo mismo ... o tal vez la configuración
SSLSessionTickets off
.Mi pensamiento aquí es eliminar el enhebrado y la coherencia / consistencia de sesión / caché como fuente de problemas. Ejecutar apache de un solo subproceso (comenzando con el indicador -X) es una forma de lograr esto, otra forma es configurar
MaxClients=1
(al menos con el modelo MPM). Los tickets de sesión han sido una fuente de problemas en el pasado con TLSv1.2 y están habilitados de forma predeterminada, este es el razonamiento detrásSSLSessionTickets off
(tenga en cuenta que esto es parte del mensaje SSL "Server Hello", no una cookie de sesión o similar). El error 'cada quinto clic' todavía me molesta: no puedo evitar notar que la mayoría de los navegadores canalizarán cuatro solicitudes de recursos en una sola ...) y abrirán una nueva conexión (un nuevo protocolo de enlace SSL, etc.) para el quinto ... sin una captura de paquetes es difícil decir qué está pasando realmente.Parece que ha eliminado la negociación de cifrado como fuente de error (puede duplicar la condición de error bajo especificaciones de cifrado mucho más restrictivas, a menos que me equivoque). Me gustaría saber si puede activar el error renegociando SSL (solo por patadas, por ejemplo):
openssl s_client -connect server:443
y luego escriba 'R', vea lo que dicen los registros.También vea si el almacenamiento en caché de la sesión funciona con la
-reconnect
opción s_client.Algo debe ser diferente sobre los contextos de recepción para las solicitudes SSL, y parece que la mejor manera de resolverlo (salvo una inspección byte por byte de lo que está pasando por el cable, que puede ser difícil de anonimizar) es severamente Limite el tamaño de lo que está escuchando (es decir, el número de oyentes).
Otras herramientas de depuración que probaría (suponiendo que publicar capturas de paquetes está fuera de discusión ...)
- ssltap (en
libnss3-tools
ubuntu)- cipherscan
- sslscan
ACTUALIZACIÓN Hacer
esto a través de ssltap se parece mucho al error de OpenSSL # 3712 resurgido (básicamente, la renegociación de teclas durante la lectura / escritura). Buscando una solución decente que no elimine el rendimiento. ¡Cosas divertidas!
fuente
SSLProtocol -SSLv3
la conexión definitivamente no era SSL3. Recuerde que en OpenSSL las funciones (y los archivos fuente) nombrados con ssl3 siguen siendo parte de todos los protocolos TLS hasta 1.2. La eliminación de los cifrados SSLv3 (y TLSv1 solo en 1.1.0) en realidad evita que se negocie cualquier protocolo por debajo de TLS1.2, pero con navegadores actualizados eso debería estar bien.SSLCiphers RSA+AES
. (Y proporcione el archivo de clave privada del servidor en Edición / Preferencias / Protocolos / SSL). Chrome solía quejarse de RSA simple (es decir, no PFS), pero acabo de volver a probar y el mío parece estar contento ahora.He visto esto antes, tuve esto antes, de hecho.
La respuesta en mi caso terminó siendo extremadamente sutil.
El adaptador de red habilitó la descarga del segmento TCP, que debido a un error de alguna forma estaba destruyendo (o truncando, no recuerdo) los últimos bytes de algunos mensajes, lo que posteriormente causó que fallara el MAC en los registros SSL.
Era una máquina virtual en VMWare.
Intentaría deshabilitar TSO / GSO / GRO en su entorno y ver si el problema desaparece.
fuente
Hay algunas rarezas con OpenSSL y multihilo. ¿Qué MPM usas? Si esto está relacionado con subprocesos múltiples, el "prefork" debería estar seguro mientras que "trabajador" y "evento" podrían verse afectados.
Si su perfil de carga lo permite, puede intentar cambiar a prefork y ver si el problema persiste.
fuente
Primero asegúrese de que Chrome esté actualizado. Las versiones anteriores dan problemas con ciertas cifras. Tuve este problema con el cromo yo mismo con sitios comunes como Amazon, etc.
Segundo, el consejo de prohibir protocolos en la "lista de cifrado" que siguió es una muy mala idea porque no prohibirá protocolos, prohibirá la mayoría de los cifrados, incluidos los que funcionan "desde" SSLv3 (pero no significa que esté habilitando SSL3 si permite cifrados SSLv3), use una lista más genérica proporcionada por el generador de configuración SSL de Mozilla para compatibilidad (tenga en cuenta que SSLv2 ya no existe o es compatible con httpd o openssl, por lo que no hay razón para prohibirlo explícitamente) y tal vez su combinación anterior fue demasiado estricta prueba este:
Si aún tiene problemas, habilite la depuración de SSL y vea lo que tiene que decir httpd (solo envíe 1 intento o dos e inhabilite este registro, esto es demasiado ruidoso):
Notas al margen: también puede continuar y eliminar SSLCertificateChainFile ya que esa directiva está en desuso en 2.4. Puede agregar la cadena SSLCertificateFile y ordenar todos los certificados de hoja a raíz, o incluso cambiar SSLCertificateChainFile a SSLCACertificateFile (aunque este se usa principalmente para la autenticación SSL).
También debe agregar (si aún no lo ha hecho) para agregar:
Editar: después de nuestra conversación, recurramos a verificar la instalación de openssl y / o si realmente es la misma versión que usa su httpd:
Ejecute este comando y veamos qué dice:
openssl ciphers -v 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'
También para asegurarse de que la versión de openssl es la correcta, ejecute esto:
fuente