本文介绍了不可能只接受带有Boost::ASIO的TLS 1.2?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,我正在尝试修改第三方(Libtorrent)以仅接受TLS 1.2协议。

SSL上下文设置的一部分:

boost::shared_ptr<context> ctx = boost::make_shared<context>(boost::ref(m_ses.get_io_service()), context::tlsv12)

ctx->set_options(context::default_workarounds
        | boost::asio::ssl::context::no_sslv2
        | boost::asio::ssl::context::no_sslv3
        | boost::asio::ssl::context::no_tlsv1
        | boost::asio::ssl::context::no_tlsv1_1
        | boost::asio::ssl::context::single_dh_use);

但是,当我测试我与OpenSSLs_Client的连接时,它似乎仍然接受TLS 1.0和TLS 1.1连接。

我是不是做错了什么?

编辑:在选项中添加了"|Boost::ASIO::SSL::Context::no_tlsv1_1"。我意识到我指的是一本旧的Boost参考指南。然而,这并没有改变任何事情。

编辑:我刚刚意识到我还没有提到这个连接是双向/相互身份验证连接。不确定这是否会改变什么。

推荐答案

这完全是胡思乱想,但试试这个:

尝试创建特定于TLS 1.2的密码字符串,然后调用

char* TLS_12_CIPHERS = "... list of ciphers specific to TLS 1.2";
SSL_CTX_set_cipher_list(ctx->native_handle(), TLS_12_CIPHERS);

然后在上下文(假设它是服务器上下文)上设置选项,服务器可以选择它想要使用的密码,而不是客户端。

SSL_CTX_set_options(ctx->native_handle(), SSL_OP_CIPHER_SERVER_PREFERENCE);

您可能认为Boost::ASIO::SSL会通过指定no_X选项为您处理这些问题,但我不能肯定。正如我所说的,这是徒劳无功的,但以这种方式使用OpenSSLAPI显式配置上下文应该会强制执行您想要的条件。即使以某种方式将某个冲突的选项设置为允许非TLS 1.2连接,使用这些选项,任何非TLS 1.2连接都将失败,并显示错误"无共享密码"。

至于为什么您的服务器甚至通告非1.2连接是可接受的,尚不清楚,但一种可能的解释是,存在一个默认上下文来通告这一点。这就是为什么他提出"适用于所有连接"的原因。

Here is a listTLS 1.2特定密码。

这篇关于不可能只接受带有Boost::ASIO的TLS 1.2?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 03:59