Heroku Redis 上的 SSL 认证验证失败

Dil*_*wen 5 ssl heroku redis flask

我正在使用 Redis 高级计划在 Heroku 上部署一个 Flask 应用程序。我收到以下错误:“SSL 认证验证失败”。尝试修复:

  • 降级到Redis 5
  • 传递ssl_cert_reqs=NoneRedis构造函数redis-py

这个问题的解决方案可能是:

  1. 解释如何在 heroku redis 高级计划中禁用 TLS 认证
  2. 解释如何使 TLS 认证适用于 heroku redis 高级计划

从 Heroku 的文档中,这可能是一个提示:“您必须在 Redis 客户端的配置中启用 TLS 才能连接到 Redis 6 数据库”。我不明白这是什么意思。

小智 9

我通过添加到 Heroku 配置的?ssl_cert_reqs=CERT_NONE末尾来解决我的问题。REDIS_URL

  • 当我专门将其设置为“?ssl_cert_reqs = none”时,这对我有用(CERT_NONE引发了“无效标志”错误) (4认同)
  • 如果您使用 Heroku Data for Redis 或其他插件,这将不会保留,因为环境变量由 Heroku 管理。 (2认同)

Dil*_*wen 5

您可以通过降级到 Redis 5 并传递ssl_cert_reqs=NoneRedis构造函数来禁用 Heroku 上的 TLS 认证。

$ heroku addons:create heroku-redis:premium-0 --version 5
Run Code Online (Sandbox Code Playgroud)
$ heroku addons:create heroku-redis:premium-0 --version 5
Run Code Online (Sandbox Code Playgroud)

我的错误是没有同时做这两件事。

理想的解决方案是解释如何为 Redis 6 配置 TLS 认证。


Joe*_*mon 5

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

来自 Heroku 支持:

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

我通过将 ssl_params 设置为 verify_none 解决了这个问题:

ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE } }
Run Code Online (Sandbox Code Playgroud)

对我来说,这是我配置 redis 的地方(在 sidekiq 初始化程序中):

# config/initializers/sidekiq.rb
Sidekiq.configure_client do |config|
  config.redis = { url: ENV['REDIS_URL'], size: 1, network_timeout: 5, 
    ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE } }
end

Sidekiq.configure_server do |config|
  config.redis = { url: ENV['REDIS_URL'], size: 7, network_timeout: 5, 
    ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE } }
end
Run Code Online (Sandbox Code Playgroud)