首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python证书验证在某些分发命令上失败

python证书验证在某些分发命令上失败
EN

Stack Overflow用户
提问于 2016-10-11 05:15:27
回答 1查看 8K关注 0票数 10

我试图通过PyPi将一个Python文件上传到twine upload <file>,但是我得到了一个SSL错误:

代码语言:javascript
复制
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命令中,并且安装和下载依赖项将成功。

这种情况发生在我的公司笔记本电脑上,不管是在家里还是在工作上,但在我的个人笔记本电脑上却没有发生。

为了解决这个问题,我基本上尝试了所以回答类似的问题 (即导出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>的形式运行了twine;这次是SSLError: [SSL] PEM lib (_ssl.c:2846)错误。

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

我对证书不太熟悉,所以我现在无所适从。

EN

回答 1

Stack Overflow用户

发布于 2017-09-11 11:41:07

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

代码语言:javascript
复制
twine upload dist\PyPubSub-4.0.0rc1-py3-none-any.whl --cert <path-to-.pem-file>

若要将.cer隐藏到.pem文件,请执行以下操作。

代码语言:javascript
复制
openssl x509 -inform der -in certificate.cer -out certificate.pem

对于使用自定义ssl证书的人来说,--cert标志是必不可少的。如果您使用的是企业网络,那么上面的解决方案应该可以解决您的问题。向管理员询问ssl证书:)

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39970887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档