如何在OpenSSL s_server中使用id_prefix

时间:2016-01-26 16:39:53

标签: ssl openssl tls1.2

我不确定我必须传递什么参数来切换openssl s_server-id_prefix

我要做的是在一侧运行openssl s_server,在另一侧运行openssl s_client,并验证双方Session-IDMaster-Key匹配。

问题是,我只能在客户端看到Session-IDMaster-Key。我不知道如何在服务器端获取它们,所以我可以比较它们。 id_prefix似乎是一个选项,但我在客户端的Session-ID中看不到前缀。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我可以看到如何使用openssl s_serveropenssl 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 ... 显示。

希望这有帮助!

相关问题