【问题标题】:python SSL certificate validation fails on some distribution commandspython SSL证书验证在某些分发命令上失败
【发布时间】:2017-02-19 14:52:12
【问题描述】:

我正在尝试通过twine upload <file> 将 Python 文件上传到 PyPi,但出现 SSL 错误:

C:\pypubsub>twine upload dist\PyPubSub-4.0.0rc1-py3-none-any.whl
Uploading distributions to https://upload.pypi.org/legacy/
Uploading PyPubSub-4.0.0rc1-py3-none-any.whl
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)

其他使用 SSL 的 Python 脚本也有同样的问题,例如

  • python setup.py bdist_wheel upload <my_package>
  • pip install <any_package>;但在那里我可以将--trusted-host pypi.python.org 添加到任何pip install 命令中,并且依赖项的安装和下载将成功

这发生在我的公司笔记本电脑上,无论是在家还是在办公室,但不会发生在我的个人笔记本电脑上。

为了解决这个问题,我基本上尝试了SO answer to similar problem(即导出 twine 试图验证的证书——大概是 pypi.python.org 的证书——然后告诉 twine 使用它):

  1. 从chrome,我转到https://pypi.pythong.org,点击URL旁边的锁,然后点击详细信息,查看证书,详细信息,复制到文件。这会生成一个 .CER 文件。
  2. 我使用SSL Converter 将 .CER 文件从 DER 格式转换为 PEM 格式。这创建了一个 .CRT 文件。
  3. 我以 twine upload <my_package> --cert <path to CRT file> 运行 twine;这次 SSL 错误是SSLError: [SSL] PEM lib (_ssl.c:2846)

然后我尝试通过修补c:\Python35\lib\ssl.py 来选择退出服务器证书验证,如Opting Out 中所述:我将_create_default_https_context = create_default_context 行替换为_create_default_https_context = _create_unverified_context。重新运行 twine 命令再次失败,出现原始 CERTIFICATE_VERIFY_FAILED 错误。

我对证书不是很熟悉,所以我现在不知道还有什么可以尝试的。

【问题讨论】:

    标签: python certificate windows-firewall twine


    【解决方案1】:

    您可以传递--cert 标志来告诉twine 要使用哪个证书。

    twine upload dist\PyPubSub-4.0.0rc1-py3-none-any.whl --cert <path-to-.pem-file>
    

    要将.cer 转换为.pem 文件,请执行以下操作。

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    

    --cert 标志对于使用自定义 ssl 证书的人来说是必不可少的。如果您使用的是公司网络,上述修复应该可以解决您的问题。向您的管理员询问 ssl 证书 :)

    【讨论】:

    • 感谢@karanja 的回答。但这似乎证实了我帖子的第 1 步到第 3 步应该有效,但也许我没有正确执行第 2 步?
    • @Schollii 您在公司防火墙后面吗?如果是这样,您是否有权访问 https ssl 证书?您需要将.cer 文件转换为.pem 文件。
    • 所以我需要从我们的 IT 部门获取 https ssl 证书?所以这是一组 ssl 证书,而不仅仅是我遇到问题的那个网站?
    • @Schollii 是的,只需向您的 IT 部门索取 https 证书文件即可。如果它是自定义的,我相信你已经在你的机器上安装了它
    • 感谢您回答这个问题。过去两个小时我一直在摸索如何解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    相关资源
    最近更新 更多