【问题标题】:Boost chose between SSL ans TLS增强 SSL 和 TLS 之间的选择
【发布时间】:2014-10-15 17:26:19
【问题描述】:

我通过以下源代码使用带有 SSL 的 boost socket:

ssl::context ctx(ssl::context::sslv23);
ctx.set_verify_mode(ssl::verify_peer);
ctx.load_verify_file("ca.pem");

我想知道 ssl::context::sslv23 是否也激活了 TLS ?

如果我想强制 TLS 连接(无 SSL 连接),是否有效:

ctx.set_options( boost::asio::ssl::context::no_sslv2 | boost::asio::ssl::context::no_sslv3 );

仅 SSL 连接的相同问题:

ctx.set_options( boost::asio::ssl::context::no_tlsv1 );

谢谢

【问题讨论】:

    标签: sockets ssl boost boost-asio


    【解决方案1】:

    我相信您需要参考 OpenSSL 文档,因为 asio::ssl::context 是 SSL_CTX 的精简包装。因此 ssl::context 构造函数使用适当的方法调用 SSL_CTX_new() 函数。以及 ssl::context::set_options() 函数调用SSL_CTX_set_options() 函数。

    特别是,对于 ssl::context::sslv23 方法,它将是:

    SSLv23_method(void), SSLv23_server_method(void), SSLv23_client_method(void) 使用这些建立的 TLS/SSL 连接 方法可以理解 SSLv2、SSLv3、TLSv1、TLSv1.1 和 TLSv1.2 协议。

    如果密码列表不包含任何 SSLv2 密码套件( 默认密码列表没有)或需要扩展名(例如 服务器名称)客户端将发送 TLSv1 客户端问候消息 包括扩展,并将表明它也理解 TLSv1.1、TLSv1.2 并允许回退到 SSLv3。服务器将 支持 SSLv3、TLSv1、TLSv1.1 和 TLSv1.2 协议。这是最好的 考虑兼容性时的选择。

    如果任何 SSLv2 密码套件包含在密码列表中并且没有 需要扩展,然后 SSLv2 兼容的客户端问候将是 客户端使用,SSLv2 将被服务器接受。这不是 推荐由于 SSLv2 的不安全性和有限的性质 SSLv2 客户端 hello 禁止使用扩展。

    可用的协议列表稍后可以使用 SSL_OP_NO_SSLv2、SSL_OP_NO_SSLv3、SSL_OP_NO_TLSv1、SSL_OP_NO_TLSv1_1 和 SSL_CTX_set_options() 的 SSL_OP_NO_TLSv1_2 选项或 SSL_set_options() 函数。使用这些选项可以 选择例如SSLv23_server_method() 并能够与所有人协商 可能的客户端,但只允许更新的协议,如 TLSv1, TLSv1.1 或 TLS v1.2。

    从不想支持 SSLv2 的应用程序(甚至是密码 字符串配置为使用 SSLv2 密码套件)可以设置 SSL_OP_NO_SSLv2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      相关资源
      最近更新 更多