6

我正在尝试通过将 Python 文件上传到 PyPi,twine upload <file>但出现 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 答案(即导出 twine 试图验证的证书——大概是 pypi.python.org 的证书——然后告诉 twine 使用它):

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

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

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

4

1 回答 1

6

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

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

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

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

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

于 2017-09-11T11:41:07.130 回答