【问题标题】:How to use id_prefix with OpenSSL s_server如何将 id_prefix 与 OpenSSL s_server 一起使用
【发布时间】:2016-01-26 16:39:53
【问题描述】:

我不确定我必须传递什么参数才能将-id_prefix 切换为openssl s_server

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

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

有什么想法吗?

【问题讨论】:

    标签: ssl openssl tls1.2


    【解决方案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)
    

    将该主密钥值与openssl s_client 终端显示的值进行比较(注意,使用openssl s_client-debug 命令行选项很重要):

    ...
    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-id_prefix 命令行选项openssl s_server例如

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

    但它并没有实质性地改变数据,也没有导致openssl s_server显示Session-ID。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2014-12-05
      • 2023-03-14
      • 1970-01-01
      • 2017-09-18
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      相关资源
      最近更新 更多