Herkou Redis - 证书验证失败(证书链中的自签名证书)

Anu*_*san 23 ruby-on-rails heroku redis heroku-redis

我在我的一个业余项目中使用 heroku redis 一段时间了。我目前用它来做三件事

  1. 它是我存储 firebase 证书的地方
  2. 它用于缓存站点上的数据
  3. 它用于 Rails sidekiq 作业

最近,我的 heroku 使用量增加了,我不得不将其更改为使用 heroku redis 高级计划。从那时起我就一直有所进步error: SSL_connect returned=1 errno=0 state=error: certificate verify failed (self signed certificate in certificate chain)。一切都保持不变,但错误开始突然出现。

heroku-redis 高级计划与基本的 heroku-redis 计划有根本不同吗?

我正在 Rails 上使用 ruby​​,如果有帮助的话,可以使用 Heroku Redis 部署在 Heroku 上。

ric*_*cks 19

根据 Heroku 的文档

你需要

创建一个名为 config/initializers/redis.rb 的初始值设定项文件,其中包含:

$redis = Redis.new(url: ENV["REDIS_URL"], ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE })
Run Code Online (Sandbox Code Playgroud)

另外,如果您在尝试使用 sidekiq 时遇到此问题:

创建一个名为 config/initializers/sidekiq.rb 的初始值设定项文件,其中包含:

Sidekiq.configure_server do |config|
  config.redis = { ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE } }
end

Sidekiq.configure_client do |config|
  config.redis = { ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE } }
end
Run Code Online (Sandbox Code Playgroud)


小智 14

实际上,当您在heroku应用程序上安装Heroku Redis时,它会为您创建2个配置变量:REDIS_TLS_URL和REDIS_URL。

这些文档实际上不正确,您必须将 SSL 设置为 verify_none,因为 TLS 会自动发生。

来自 Heroku 支持:

“我们的数据基础设施使用自签名证书,因此证书可以定期循环......您需要将 verify_mode 配置变量设置为 OpenSSL::SSL::VERIFY_NONE”


pde*_*nya 6

@ricks 的回答让我完成了 90% 的任务,但是对于像我这样在 Heroku 的 Redis 中使用 Rails.cache 的人来说,你不需要那个初始化程序,只需要在 production.rb 中配置这一行:

config.cache_store = :redis_cache_store, { url: ENV['REDIS_URL'], ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE } }
Run Code Online (Sandbox Code Playgroud)


kan*_*kyu 5

对于其他一些提出这个问题的用户,可能也有我今天遇到的同样的问题。错误消息与 Heroku 相同,但与 Hotwire 和config/cable.yml文件有关。当您将以下内容添加到该文件时,错误就会消失。

production:
  adapter: redis
  url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
  channel_prefix: name_production
  ssl_params:
    verify_mode: <%= OpenSSL::SSL::VERIFY_NONE %>
Run Code Online (Sandbox Code Playgroud)