我不确定我必须传递什么参数来切换openssl s_server的-id_prefix
。
我要做的是在一侧运行openssl s_server
,在另一侧运行openssl s_client
,并验证双方Session-ID
和Master-Key
匹配。
问题是,我只能在客户端看到Session-ID
和Master-Key
。我不知道如何在服务器端获取它们,所以我可以比较它们。
id_prefix
似乎是一个选项,但我在客户端的Session-ID
中看不到前缀。
有什么想法吗?
答案 0 :(得分:1)
我可以看到如何使用openssl s_server
和openssl s_client
检查主密钥,但不能查看会话ID;我不确定为什么。
这就是我的所作所为。首先,我启动了一个在本地运行的服务器:
$ openssl s_server -accept 4433 -cert ./server.pem -tls1_2
然后,在另一个终端/窗口中,我连接到该服务器:
$ openssl s_client -connect 127.0.0.1:4433 -debug
在服务器终端中,我看到SSL会话已启动:
Using default temp DH parameters
ACCEPT
-----BEGIN SSL SESSION PARAMETERS-----
MFUCAQECAgMDBALAMAQABDDAOWXb47pESLXfWW1DYfaccOPGQcfgeaHW4sFP/avj
ejwVgvWNXGXy1vn6U3uLOeWhBgIEVqrm26IEAgIcIKQGBAQBAAAA
-----END SSL SESSION PARAMETERS-----
...
CIPHER is ECDHE-RSA-AES256-GCM-SHA384
Secure Renegotiation IS supported
这里需要注意的关键是SSL会话参数的base64编码数据。我将这些数据复制并粘贴到一个单独的文件中,例如 sess.pem
。
然后,我使用openssl sess_id
解码sess.pem
文件:
$ openssl sess_id -noout -text < ./sess.pem
SSL-Session:
Protocol : TLSv1.2
Cipher : C030
Session-ID:
Session-ID-ctx: 01000000
Master-Key: 9C921511052D3F212FF718704518FC526474D69FC26BC1165DBD203C6E221BB3A84686BC5D15A7BD9FA7BB72201A7276
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1454040610
Timeout : 7200 (sec)
Verify return code: 0 (ok)
将Master-Key值与openssl s_client
终端显示的值进行比较(注意,使用-debug
命令行选项非常重要openssl s_client
看到这个):
...
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: 417D443BFD5702BEA974C5758FD65A0FC217B0FD9750C4CECF0915895C4E616D
Session-ID-ctx:
Master-Key: 9C921511052D3F212FF718704518FC526474D69FC26BC1165DBD203C6E221BB3A84686BC5D15A7BD9FA7BB72201A7276
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 7200 (seconds)
TLS session ticket:
....
所以我不确定为什么服务器输出不会显示生成的会话ID,但您至少可以使用上面的内容来比较Master-Key值。我尝试使用-context
的{{1}}和-id_prefix
命令行选项,例如:
openssl s_server
但它并没有实质性地更改数据,也没有导致会话ID由$ openssl s_server -accept 4433 -context FOO -id_prefix BAR ...
显示。
希望这有帮助!