Editar (2012/09/23): Pregunta y recibirás . TestSSLServer es una herramienta simple de línea de comandos que escribí este fin de semana; obtiene de un servidor SSL / TLS determinado la lista de conjuntos de cifrado admitidos, las versiones de protocolo y el soporte de Desinflado de nivel TLS. Luego proporciona un resumen de la fuerza de encriptación y la vulnerabilidad a los ataques de BESTIA y CRIMEN. Está escrito en Java y debería funcionar "en todas partes" (aunque solo lo probé desde un cliente Linux / ppc).
(Tenga en cuenta que BEAST y CRIME se dirigen al cliente, no al servidor. Estamos hablando de los pasos que el servidor puede tomar para "proteger" al cliente al no permitirle usar combinaciones de funciones vulnerables).
Respuesta original:
Para la compresión, hay dos lugares donde se puede activar; La publicación del blog que vinculas para hablar sobre el lugar equivocado, de la que no se trata el ataque por CRIMEN, es no .
CRIME utiliza la compresión que se encuentra en el nivel SSL / TLS: una compresión negociada durante el protocolo de enlace, y que se aplica a cada byte que se envía dentro del túnel SSL / TLS. En un contexto HTTPS, esta compresión funciona tanto en los cuerpos de solicitud / respuesta HTTP como en los encabezados de HTTP (incluidas las cookies, que es el punto de CRIME). La compresión que se produce en el nivel HTTP es la que se especifica con los encabezados HTTP (como "Aceptar-Codificación") y que se aplica a la solicitud / respuesta Sólo cuerpos . Esa compresión no cubre las cookies (que se encuentran en los encabezados) y, por lo tanto, es, presumiblemente, sin CRIME.
(Esto no excluye la existencia teórica de un ataque tipo CRIME que abusa de la compresión a nivel de HTTP en los cuerpos, pero requeriría un cuerpo de solicitud o respuesta que contenga datos confidenciales y datos que el atacante pueda elegir. )
Para probar el soporte de compresión de un servidor, use esto:
openssl s_client -connect www.theservername.com:443
Esto producirá una salida que contiene el certificado del servidor y termina con un bloque de texto que se ve así:
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: zlib compression
Expansion: zlib compression
SSL-Session:
Protocol : TLSv1.1
Cipher : DHE-RSA-AES256-SHA
Session-ID: 4B4110C44117BA0382CA6C3903A8185E0C156B253073E66B2D44F04B83611633
Session-ID-ctx:
Master-Key: C11D38EE064BE6549364D54BD60E216E367A52825E62FFCCBEFC4AC8DB97D07BD72B7355CB268B91E3AD176EB69446AA
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
0000 - 4c f8 be c1 d1 0f cf 03-4a 99 89 8b 75 28 97 3c L.......J...u(.<
0010 - 3e cf 2a b8 0f f0 d1 b4-7d c7 83 16 03 2c f0 8a >.*.....}....,..
0020 - 1b a7 57 be dd 1b be a3-14 eb cf 34 42 99 e0 5a ..W........4B..Z
0030 - c5 96 43 da c7 d9 dd da-ed 4c e2 7c eb c1 8b a8 ..C......L.|....
0040 - ce 73 c8 22 43 10 88 d6-d2 f2 df 91 9d 47 71 70 .s."C........Gqp
0050 - 77 bb c0 55 cd 46 34 3b-44 26 36 a1 7f 37 64 cd w..U.F4;D&6..7d.
0060 - 72 64 66 89 cc f6 8b 23-17 9b 9a 91 23 6a f7 c2 rdf....#....#j..
0070 - 8a e2 8c 10 85 8f b7 6c-60 d2 b6 72 b3 13 98 8b .......l'..r....
0080 - 75 da 68 cc 2a ca 4f fb-ec 4c f2 db 91 4a f7 2a u.h.*.O..L...J.*
0090 - 40 eb 92 44 c7 7a f7 84-ef 65 ea 2c 96 aa c5 ba @..D.z...e.,....
00a0 - c3 b5 76 6d 52 03 85 c9-27 53 a2 a4 70 54 06 37 ..vmR...'S..pT.7
00b0 - 82 3e 09 93 21 6d f6 e7-eb cf c3 5e 26 19 e1 a2 .>..!m.....^&...
Compression: 1 (zlib compression)
Start Time: 1348073749
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
Esto se hizo en un servidor que admite compresión de nivel TLS. Verá " zlib compression
" en tres lugares: De hecho, la compresión es compatible con este servidor. Tenga en cuenta que no hay un solo signo de un encabezado HTTP en ninguna parte! Simplemente escriba el comando openssl
y observe la salida. No es necesario ingresar un encabezado HTTP.
En un servidor que NO admite la compresión de nivel TLS, las cosas se verán así:
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-RC4-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.1
Cipher : ECDHE-RSA-RC4-SHA
Session-ID: 59D609F13BEE9157D26318ADB12F4CF219EF7A1BC2C87AF84AD66773303F90A6
Session-ID-ctx:
Master-Key: 1DD9E0C306A86A7EC823561EF0B1F47B63E70B43D57F3B3FBB3D389863F540E3B4CCE5DE454E6D19811C24001E95777A
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 100800 (seconds)
TLS session ticket:
0000 - de c6 06 25 10 c9 22 38-c4 1f 82 d7 c7 b5 62 08 ...%.."8......b.
0010 - 01 c0 e1 26 e2 64 8a 62-99 74 85 bb 60 bf a8 e0 ...&.d.b.t..'...
0020 - 65 08 74 89 d5 62 45 e9-b4 f0 80 4e f7 bd ff d5 e.t..bE....N....
0030 - 6a 12 3b 90 97 ca 7a f4-d1 1b e1 0d 89 d2 52 49 j.;...z.......RI
0040 - 11 fe 92 82 94 70 ba 4b-5e 81 ff f2 12 62 f4 79 .....p.K^....b.y
0050 - 11 eb 74 7a d6 ee 10 4e-b5 6d 50 8d 1c 1c 8e 57 ..tz...N.mP....W
0060 - 19 46 67 91 89 2e 45 28-2e 49 94 8e c8 32 28 bf .Fg...E(.I...2(.
0070 - 7b 73 82 ab 63 c4 b7 8f-5c b3 1b 5c 74 59 3c 8d {s..c...\..\tY<.
0080 - ec 8a 6a 3a 28 c2 82 c1-d7 d5 4f ec 7e 79 e7 57 ..j:(.....O.~y.W
0090 - 4a f9 45 e7 J.E.
Start Time: 1348074257
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
El " Compression: NONE
" muestra que este segundo servidor efectivamente rechaza el uso de la compresión de nivel TLS.
Tenga en cuenta también que el primer servidor eligió DHE-RSA-AES256-SHA
como conjunto de cifrado, es decir, un conjunto que utiliza el AES de cifrado de bloque en el modo CBC. Este primer servidor es potencialmente vulnerable a BESTIA y CRIMEN. El segundo servidor seleccionó ECDHE-RSA-RC4-SHA
, que es inmune a la BESTIA.
(El primer servidor es el mío; ya que no uso cookies en absoluto, no estoy nervioso por los ataques de robo de cookies. El segundo servidor es www.google.com
.)
Si encuentro el tiempo, escribiré una herramienta que proporcione tales resultados más fácilmente. No es necesario hacer un protocolo de enlace SSL / TLS completo, solo enviar un ClientHello y ver el ServerHello que regresa.