我正在使用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中执行此操作的方法还是我必须尝试多个连接检查是否可以进行通信,如果没有,则尝试使用较低的协议版本?
感谢。
答案 0 :(得分:1)
没有协议优先级设置。客户端将宣布它可以对服务器执行的最佳版本,服务器将选择此版本或更低版本。如果客户端不支持服务器选择的版本,则握手将失败。这不是特定于OpenSSL,但这是SSL / TLS的工作方式。
不要将客户端和服务器之间的握手与大多数浏览器使用的TLS降级机制混淆。在这种情况下,如果与更好版本的握手失败,浏览器将在具有较低版本的新TCP连接上重试SSL握手。此行为是解决损坏的SSL / TLS实现。这些降级主要限于浏览器,简单的TLS堆栈容忍度较低,如果第一次握手失败则会永久失败。