本文介绍了不可能只接受带有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?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!