【发布时间】:2015-03-16 15:41:08
【问题描述】:
我正在使用 OpenSSL 实现 SSL 客户端 (1) 只“讲”TLS 1.2、TLS 1.1 和 TLS 1.0, (2) 准确设置此优先级:TLS 1.2。如果无法进行通信,请使用 TLS 1.1。如果没有,TLS 1.0。如果没有,拒绝连接。
我通过使用实现(1)
SSL_CTX_set_options(m_ssl_ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
但我不知道有什么方法可以实现 (2)。在 OpenSSL 中是否有任何“优雅”的方法可以做到这一点,或者我是否必须尝试多个连接来检查是否可以通信,如果不能,则尝试较低的协议版本?
谢谢。
【问题讨论】:
-
您可以在 OpenSSL 服务器上执行此操作。 服务器决定协议。 Apache HTTPD、OpenLDAP、MySQL,在我所知道的使用 OpenSSL 的主要软件中,都可以通过它们的配置文件来管理它。 RFC 没有强制要求,但 OpenSSL 绝对允许这样做。例如,这是减轻 BEAST 攻击的方式。
-
@EJP: “例如,您如何缓解 [在服务器上] 的 BEAST 攻击...” - 标准没有指定是使用客户端的首选密码套件还是服务器的首选密码套件。习惯上允许客户端选择(由服务器选择客户端的首选)。对于您描述的行为,您需要在服务器上添加
SSL_OP_CIPHER_SERVER_PREFERENCE标志。