2016-10-11 172 views
2

我试图通过twine upload <file>上传一个Python文件的PyPI但我得到的SSL错误:蟒蛇一些分布SSL证书验证失败命令

使用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) 

其他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(即导出证书麻线正试图验证 - 大概是pypi.python.org的 - 然后告诉麻线使用它):

    从Chrome浏览器
  1. ,我去https://pypi.pythong.org,点击URL旁边的锁,然后点击Details,View Certificate,Details,Copy to File。这生成了一个.CER文件。
  2. 我用SSL Converter将.CER文件从DER格式转换为PEM格式。这创建了一个.CRT文件。
  3. 我跑线为twine upload <my_package> --cert <path to CRT file>;这次SSL错误是SSLError: [SSL] PEM lib (_ssl.c:2846)

我然后试图通过如Opting Out描述修补c:\Python35\lib\ssl.py停用服务器证书验证的:我通过_create_default_https_context = _create_unverified_context取代线_create_default_https_context = create_default_context。重新运行twine命令再次失败,原因是CERTIFICATE_VERIFY_FAILED错误。

我并不是那么熟悉证书,所以我现在处于亏损状态,还有什么可以尝试。

回答

0

您可以通过一个--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证书:)

+0

Thx @karanja for answer。但似乎这证实我的文章的步骤1到3应该工作,但也许我没有正确地做第2步? – Schollii

+0

@Schollii是否支持企业防火墙?如果是这样,你有权访问https SSL证书吗? 您需要将'.cer'文件转换为'.pem'文件。 –

+0

所以我需要从我们的IT获得https SSL证书?所以这是一套ssl证书,不仅仅是那个我遇到麻烦的网站? – Schollii