使用 Net::HTTP 设置 ssl 版本

Set ssl version with Net::HTTP

我有一台只接受 SSLv3 和 SSLv3 的旧服务器。我想在发出请求时设置ssl版本。

http = Net::HTTP.new(@request.uri.host, @request.uri.port)
http.use_ssl = @request.uri.scheme == 'https'
http.ssl_version = :SSLv3
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

导致

[2020-09-10T05:37:14.452819 #254200] FATAL -- :   
OpenSSL::SSL::SSLError (SSL_CTX_set_min_proto_version):

我尝试了其他组合但失败了。 http.ssl_version = :SSLv3 http.ssl_version = "SSLv3"

如何设置具体的ssl版本?我正在使用 Ruby 2.7.1 和 Rails 6。谢谢。

在大多数当前版本的 OpenSSL 中,编译时静态禁用对 SSLv3 的支持,因为该协议被广泛认为是不安全的。因此,通常无法在这些 OpenSSL 版本上继续使用 SSLv3。

如果 SSLv3 是一个硬性要求,您可能必须首先使用合适的配置选项编译您自己的 OpenSSL 版本,然后根据您的自定义 OpenSSL 编译您的Ruby。

您最好更新服务器以支持更新的更安全的协议(例如 TLSv1.2 或 TLSv1.3),或者要求服务器的运营商这样做。