我使用以下源代码使用带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 );
由于
答案 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。