不能只接受TLS 1.2和boost :: asio?
所以我想修改第三方(libtorrent)只接受TLS 1.2协议。 SSL环境的设置的不能只接受TLS 1.2和boost :: asio?
部分:
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.First似乎仍然接受TLS 1.0和TLS 1.1连接。
有什么我做错了吗?
编辑:添加 “|的boost ::支持ASIO :: SSL ::背景:: no_tlsv1_1” 来选择。我意识到我指的是一个旧的助力参考指南。但它没有改变任何东西。
编辑:我只知道,我还没有提到,这个连接是双向/双向认证连接。不知道这是否会改变任何事情。
asio :: ssl :: context中没有TLS1.2的常量。但是你可以使用原生的OpenSSL API来做到这一点:
#include <openssl/ssl.h>
long ssl_disallowed = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2;
ssl_disallowed &= ~SSL_OP_NO_TLSv1_2;
SSL_CTX_set_options(ctx.native_handle(), ssl_disallowed);
这是一个在黑暗中总射门,但试试这个:
尝试创建针对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提出了“适用于所有连接”的观点。
Here is a list TLS 1.2特定密码。
您需要展示更多代码。具体来说,您如何确保您的ctx适用于所有连接 – sehe
我不知道如何向您展示这是一个好方法。但让我们假设这适用于所有连接,这个代码是否正确? – jimmy
我这么认为。关键是,除了这个,甚至开始思考的东西都可能是错误的。看[没有人再写测试用例](http://kera.name/articles/2013/10/nobody-writes-testcases-any-more/)。把它变成一个SSCCE,你可能会自己发现问题。否则,我们在这里交叉检查 – sehe