因此,我试图将第三方(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/

10-15 13:20