【问题标题】:Certificate verify failing when running python under supervisord在supervisord下运行python时证书验证失败
【发布时间】:2019-01-21 10:48:03
【问题描述】:

我有一个程序在我的用户/virtualenv 中成功运行。该程序使用requests 访问API。就本文而言,整个程序可以理解为:

requests.get("https://example.com")

当我从命令行调用它时,它工作得很好。但是,我试图让它在supervisord 下运行,无论出于何种原因,当我这样做时,它都会失败,并出现如下所示的 SSL 错误:

SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)")

它使用相同的用户、python 环境、目录等。知道还有什么要检查的/还有什么可能导致这种情况?

编辑:我认为这可能是防火墙规则类型的事情。探索该选项。

【问题讨论】:

  • 您是否尝试将verify=False 添加到您的请求中:requests.get("https://example.com", verify=False)
  • 是的,如果我添加verify=False,我会收到一个不同的错误(奇怪的是来自服务器的502,尽管它在正常运行时总是返回200。另外,我不想添加verify=False 作为长期解决方案,即使它确实有效,因为我确实想验证证书。
  • 您是否尝试按照建议的here 降级requests
  • 我没有这样做,但我认为这有点忽略了问题的重点——这就是为什么在主管下运行时表现不同?因此,任何涉及绕过请求的解决方法似乎都无法解决问题的根本原因。

标签: python ssl python-requests ssl-certificate supervisord


【解决方案1】:

在 supervisord 环境中是否提供 SSL 证书?我假设您使用 requests.certs,那么那里的证书是预期的 requests.certs.where() 吗?

【讨论】:

    【解决方案2】:

    所以事实证明这是一个网络代理的事情。我正在运行的机器使用 squid 代理,我必须添加以下行以在我的主管配置中设置正确的环境变量才能使其工作:

    environment=http_proxy=http://proxy.server:3128/,https_proxy=http://proxy.server:3128/
    

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2021-03-02
      • 2020-12-15
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多