如何使用 Shrine RemoteUrl 插件绕过 SSL 验证

Posted

技术标签:

【中文标题】如何使用 Shrine RemoteUrl 插件绕过 SSL 验证【英文标题】:How to bypass SSL verification with Shrine RemoteUrl plugin 【发布时间】:2020-05-20 11:57:04 【问题描述】:

我在 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 实现下载(你可以用它Disabling Certificate Verification)

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢,但我仍然遇到同样的错误。我不明白为什么...该代码适用于另一个域,但不适用于我的远程站点。明天再试。 不起作用。 SSL 仍处于检查状态。你不觉得上面代码中http.follow下的选项应该是http.something吗? 当您尝试直接使用 http.rb 时(通过 :ssl_context 记录),这行得通吗?

以上是关于如何使用 Shrine RemoteUrl 插件绕过 SSL 验证的主要内容,如果未能解决你的问题,请参考以下文章

Shrine Gem Ruby on Rails 无服务器图像处理程序,后台作业

Rails 和 Shrine 创建带有附件的模型记录

使用 Shrine 和 MiniMagick 将 GIF 转换为 JPEG

“上帝的操作系统” Shrine!既不是 Windows,也不是 Linux

从 ActiveStorage 迁移到 Shrine 的 Rake 任务

在使用 Shrine 和 Rails 加密之前为图像文件设置 mime 类型