Chris
Chris

Reputation: 193

How to use id_prefix with OpenSSL s_server

I'm not sure what argument do I have to pass to switch -id_prefix for openssl s_server.

What I am trying to do is to run openssl s_server on one side, and openssl s_client on the other, and verify that Session-ID and Master-Key matches on both sides.

The problem is, that I only get to see the Session-ID and Master-Key on the client side. I'm not sure how to obtain them on the server side as well, so I can compare them. id_prefix seems to be one option, but I don't see the prefix in the Session-ID on the client side.

Any ideas?

Upvotes: 1

Views: 946

Answers (1)

Castaglia
Castaglia

Reputation: 3089

I can see how you can check the Master-Key using openssl s_server and openssl s_client, but not the Session-ID; I'm not sure why.

Here's what I did. First, I started a server running locally:

$ openssl s_server -accept 4433 -cert ./server.pem -tls1_2

Then, in a different terminal/window, I connected to that server:

$ openssl s_client -connect 127.0.0.1:4433 -debug

In the server terminal, I saw the SSL session started:

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

The key thing thing to notice here is that base64-encoded data for the SSL session parameters. I copy and pasted that data into a separate file, e.g. sess.pem.

Then, I used openssl sess_id to decode that sess.pem file:

$ 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)

Compare that Master-Key value with the one that the openssl s_client terminal shows (note that it's important to use the -debug command-line option for openssl s_client to see this):

...
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:
    ....

So I'm not sure why the server output doesn't show the session ID generated, but you can at least use the above to compare the Master-Key values. I experimented with using both the -context and -id_prefix command-line options for openssl s_server, e.g.:

$ openssl s_server -accept 4433 -context FOO -id_prefix BAR ...

but it did not substantially change the data, nor did it cause the Session-ID to be displayed by openssl s_server.

Hope this helps!

Upvotes: 1

Related Questions