【问题标题】:Change SSL protocol version while reusing session重用会话时更改 SSL 协议版本
【发布时间】:2015-02-17 06:48:59
【问题描述】:

我正在使用ssl3 连接到服务器。当-change_session_version 选项与-reconnect 一起指定时,我希望会话协议从SSLv3 更改为SSLv2

这是我的命令:apps/openssl s_client -connect 10.102.113.3:443 -reconnect -change_session_version -ssl3

现在,我知道我应该拥有以下代码:

if(change_session_version)
    s->session->ssl_version = SSL2_VERSION;

或者这个代码:

if(change_session_version)
    s->version = SSL2_VERSION;

我不知道该把这段代码放在哪里。

如果指定了-change_session_version 选项,我已在ssl.h 中将change_session_version 声明为int,并将其设置为1

请帮帮我!

【问题讨论】:

    标签: security ssl openssl


    【解决方案1】:

    您的问题在措辞上体现了矛盾。 SSL 中的“会话”包括协议、密码套件、密钥材料和对等证书。如果不创建新会话,您将无法更改其中任何一个。

    编辑仅仅改变一块本地内存中的一个变量不可能完成任何有用的事情。对等点不会知道它,并且在其他连接上共享会话的其他对等点也不会知道它。您必须重新握手并协商一个新的会话。

    【讨论】:

    • 啊,所以当你想重用一个连接,并且你试图在重用发生之前更改 version 时,SSL 变量版本的更改将被忽略,因为通信已经发生在已经建立的频道上?
    • 它会被忽略,因为 session 已经存在,更不用说连接了。如果您甚至可以对变量进行写访问,那将是令人惊讶的。除了刷新密钥之外,肯定没有 SSL 机制可以对在线上的现有会话进行任何操作。
    【解决方案2】:

    我认为这是不可能的。首先,实际上不再支持 SSLv2,大多数堆栈甚至都没有实现它,而其他堆栈则禁用了它。然后在 SSLv2 中根本不支持会话恢复。

    【讨论】:

    • 好的,能不能把SSLv3改成TLS 1.2?我会把这段代码放在哪里? if(change_session_version) s->version = TLS1_2_VERSION;
    • 这可能取决于服务器实现。会话票证仅在 TLS1.0 之后可用,建议在票证中对协议版本进行编码。会话 ID 较旧,它取决于服务器存储在那里的内容。如果您只是想尝试它是否有效,您可以查看s_client-sess_out-sess_in 参数并尝试使用另一个协议版本恢复会话。
    • @RandomlyNamedUser 你根本做不到。这没有意义。您只能在您自己的会话数据副本中更改它。对等点对此一无所知,其他任何对等点也不会共享同一会话。您将不得不重新握手并协商新的会话。
    猜你喜欢
    • 2017-06-25
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 2017-05-06
    • 1970-01-01
    相关资源
    最近更新 更多