编辑(2012 年 9 月 23 日): 询问,您将收到。TestSSLServer是我这个周末写的一个简单的命令行工具;它从给定的 SSL/TLS 服务器获取支持的密码套件、协议版本和对 TLS 级别 Deflate 的支持的列表。然后,它总结了加密强度以及对 BEAST 和 CRIME 攻击的脆弱性。它是用 Java 编写的,应该可以“在任何地方”工作(不过,我只从 Linux/ppc 客户端对其进行了测试)。
(请注意,BEAST 和 CRIME 针对的是客户端,而不是服务器。我们在这里讨论的是服务器可以采取哪些步骤来“保护”客户端,不允许它使用易受攻击的功能组合。)
原始回复:
对于压缩,有两个地方可以激活它;您链接到的博客文章谈论了错误的地方,CRIME 攻击与此无关。
CRIME 使用 SSL/TLS 级别的压缩:握手期间协商的压缩,适用于 SSL/TLS 隧道内发送的每个字节。在 HTTPS 上下文中,此压缩对 HTTP 请求/响应正文和 HTTP标头(包括 cookie,这是犯罪的重点)都进行。在HTTP级别发生的压缩是使用HTTP标头(如“Accept-Encoding”)指定的压缩,它仅适用于请求/响应主体。该压缩不涵盖 cookie(位于标头中),因此可能是无犯罪的。
(这并不排除理论上存在类似 CRIME 的攻击,该攻击在主体上滥用 HTTP 级压缩,但它需要一个包含机密数据和攻击者可以选择的数据的请求或响应主体。)
要测试服务器的压缩支持,请使用:
openssl s_client -connect www.theservername.com:443
这将产生一些包含服务器证书的输出,并以如下所示的文本块结束:
---
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)
---
这是在支持 TLS 级别压缩的服务器上完成的。您在三个地方看到“ zlib compression
”: 此服务器确实支持 Deflate 压缩。请注意,任何地方都没有 HTTP 标头的单一标志!只需键入openssl
命令,然后查看输出。无需输入 HTTP 标头。
在不支持 TLS 级别压缩的服务器上,情况如下所示:
---
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)
---
" Compression: NONE
" 表明第二台服务器确实拒绝使用 TLS 级别的压缩。
另请注意,第一个服务器选择DHE-RSA-AES256-SHA
作为密码套件,即在 CBC 模式下使用分组密码 AES 的套件。然后,这第一台服务器可能容易受到 BEAST 和 CRIME 的攻击。选择的第二个服务器ECDHE-RSA-RC4-SHA
是 BEAST-immune。
(第一台服务器是我的;因为我根本不使用 cookie,所以我对 cookie 窃取攻击并不紧张。第二台服务器是www.google.com
。)
如果我有时间,我会写一个更容易给出这样结果的工具。无需进行完整的 SSL/TLS 握手,只需发送 ClientHello 并查看返回的 ServerHello。