提升SSL和TLS之间的选择

时间:2014-10-15 17:26:19

标签: sockets ssl boost boost-asio

我使用以下源代码使用带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 );

由于

1 个答案:

答案 0 :(得分:2)

我认为您需要引用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密码套件,则为no   扩展是必需的,然后SSLv2兼容的客户端将是   客户端使用和SSLv2将被服务器接受。这不是   建议由于SSLv2的不安全性和有限的性质   SSLv2客户端问候,禁止使用扩展。

     

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

     

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