首页 > 解决方案 > 如何使用 Shrine RemoteUrl 插件绕过 SSL 验证

问题描述

我在 Rails 应用程序中使用 Shrine RemoteUrl 插件从远程站点获取一些文件(pdf)。这个站点有一个旧的 https 证书,我遇到了一些这样的错误:

{:media=>["download failed: SSL_connect returned=1 errno=0 state=error: dh key too small"]}

我无法修改远程站点的 conf,所以我认为我需要绕过 SSL 验证。但是找不到办法。

我正在尝试在 Shrine 初始化程序文件中执行此操作,但我不知道如何将正确的选项传递给 Down::Http。Down::Http 后端使用 http.rb gem 实现下载(您可以使用它禁用证书验证

Shrine.plugin :remote_url, max_size: 20*1024*1024, downloader: -> (url, max_size:, **options) do
  Down::Http.download(url, max_size: max_size, **options) do |http|
    http.follow(max_hops: 2).timeout(connect: 2, read: 2)
  end
end

非常感谢任何帮助。谢谢!

标签: ruby-on-railsshrine

解决方案


Down::Http.download将所有选项转发到 http.rb,因此您可以传递相同的:ssl_context选项:

ctx = OpenSSL::SSL::SSLContext.new
ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE

Down::Http.download(url, max_size: max_size, ssl_context: ctx, **options) do |http|
  http.follow(max_hops: 2).timeout(connect: 2, read: 2)
end

推荐阅读