因此,我试图将第三方(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);
但是,当我测试与OpenSSL s_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选项可以为您解决这些问题,但是我不确定。就像我说的那样,这是一个黑暗的镜头,但是以这种方式使用OpenSSL API显式配置上下文应该可以满足您的条件。即使在某处以某种方式设置了一些冲突的选项以允许非TLS 1.2连接,使用这些选项,任何非TLS 1.2连接都将失败,并显示错误“无共享密码”。
至于为什么您的服务器甚至宣告不接受1.2连接是未知的,但是一种可能的解释是,存在一个默认上下文来宣告此问题。这就是为什么sehe提出了“应用于所有连接”的观点。
TLS 1.2特定密码的Here is a list。
关于ssl - 无法仅接受带有boost::asio的TLS 1.2?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31005745/