19 openssl
当使用依赖于 Diffie-Hellman 密钥交换的 SSL 密码时,所用私钥的大小对于该密钥交换的安全性至关重要。
当我使用该openssl s_client工具连接到服务器时。如何查询使用的DH参数?
小智 18
我不知道一个易于使用的命令行开关,但在openssl s_client命令行中,您可以添加-msg选项以获取握手消息的十六进制转储。然后查找ServerKeyExchange消息;它应该是这样的:
<<< TLS 1.2 Handshake [length 030f], ServerKeyExchange
0c 00 03 0b 01 00 ff ff ff ff ff ff ff ff c9 0f
da a2 21 68 c2 34 c4 c6 62 8b 80 dc 1c d1 29 02
4e 08 8a 67 cc 74 02 0b be a6 3b 13 9b 22 51 4a
(...)
Run Code Online (Sandbox Code Playgroud)
它是这样写的:
0c 00 03 0b:消息类型为“ServerKeyExchange”(即“0c”),长度为 0x00030B 字节。01 00,这意味着一个整数编码超过 0x0100 字节。那是 256 个字节,因此模数的长度在 2041 到 2048 位之间。ff ff ff ff.... 然后模数的长度正好是 2048 位。如果您使用 ECDHE 密码套件(椭圆曲线),那么ServerKeyExchange格式当然是不同的。
请参阅消息定义的标准ServerKeyExchange。对于 DHE 密码套件,它依次包含模数p、生成器g和服务器 DH 公钥y,每个都以上述格式表示为一个大整数(16 位标头,包含以字节为单位的长度,然后是整数无符号大端编码中的值)。
最近的OpenSSL版本倾向于选择一个DH模量大小匹配(从安全的角度来看)服务器的密钥对的强度(用于签名的ServerKeyExchange消息)。在上面的示例中,服务器具有 2048 位 RSA 密钥,因此 OpenSSL 选择使用 2048 位 DH 模数(在这种情况下,RFC 3526 第 3 节中描述的众所周知的模数)。
其他一些服务器坚持使用 1024 位 DH 组,以确保与一些不支持更大 DH 组的现有客户端兼容(最大的问题是 Java 中的 SSL 实现,在 2012 年的Java 8 build 56中修复)。对于 DHE 密码套件,TLS 协议中的一个已知缺陷是客户端无法指定它可以支持的模数大小(这对于 ECDHE 是固定的,因为客户端可以指定它接受的确切曲线列表) .
小智 12
如果你有 PEM 格式的证书,你可以试试这个命令,它应该会给你一个正确的 Openssl 命令输出。
openssl dhparam -inform PEM -in ./imapd.pem -check -text
(样本输出)
PKCS#3 DH 参数:(512 位)
主要的:
xx:xx:xx:xx
xx:xx:xx:xx
xx:xx:xx:xx
生成器:2 (0x2)
DH 参数似乎没问题。
-----开始DH参数-----
XXX
XXX
-----结束DH参数-----
希望这是你正在寻找的。
| 归档时间: |
|
| 查看次数: |
25554 次 |
| 最近记录: |