如何在ubuntutrusty上安全地使用pip(带SSL)?

2024-06-16 09:53:53 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是,如何在ubuntutrusty上用pip安全地安装包?当然,我需要澄清为什么我认为这是不安全的。在

在python2.7.9之前,如果您在没有安装额外的openssl相关python库的情况下发出https请求,urllib3会给出一个InsecurePlatformWarning。这是一个公认的问题和答案:

InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately

问题是,如果您安装pip版本6左右,它会在您安装任何东西时发出警告。从阅读问题的官方答案来看:

https://urllib3.readthedocs.org/en/latest/security.html#pyopenssl

听起来问题出在pythonsl库中。刚刚在Python库中从ssl切换到最新版本的ssl?我的猜测(也许是一个错误的猜测)是pip以前使用Python库,它只是使用了一个旧版本的urllib,它甚至没有发出警告。所以一直以来都是不安全的(尽管特别关注的秃鹫似乎是最近才出现的)。在

如果是这样的话,Ubuntu上pip的股票版就不安全了。我不能用它来安全地安装这些东西来保证它的安全。不管怎样,我可以从Ubuntu的repo安装相同的东西,它用GPG验证包:

http://packages.ubuntu.com/search?keywords=python-ndg-httpsclient

但以上仅在Utopic中提供。在信任上我似乎被卡住了。在

那有什么关系?我是否必须掷骰子,不安全地安装这些东西一次,然后再安全地使用pip?还是我完全误解了形势?在


Tags: pip答案https版本true警告sslubuntu
2条回答

默认情况下,pip使用标准库ssl模块(除非您还安装了前面提到的额外库)。在python2.7.9和python3.2(ish,我相信是3.2,可能是3.1)之前,标准库中的ssl模块缺乏控制与ssl相关的某些设置的能力。在

其中一些设置:

  • 如果不显式地固定到TLSv1.0,就不能禁用SSLv3(也不能固定到TLSv1.1或TLSv1.2)。在
  • 不能禁用TLS压缩。在
  • 您不能使用SNI,这会迫使您尝试对话的每个主机不使用SNI(或者您需要为这些主机禁用TLS验证)。在
  • 不能告诉OpenSSL在服务器显式地给它的链上选择一个较短但仍然可信的链。这意味着,如果底层证书存储删除了弱的1024位根证书,那么一些原本可以验证的服务器将失败。在
  • 即使在更老的python(2.6)上,您也不能设置密码,这意味着您只能使用默认的OpenSSL(通常会导致不安全或不太理想的选择)。在

至于你该怎么做,这完全取决于你自己。如果您是从PyPI本身安装的,那么这些东西很多都无关紧要,因为我们在服务器端禁用了它们,而不是依赖客户端来实现它们。然而,请求(pip用于访问存储库的底层库)会发出这些警告(pip不会使它们静音),因为PyPI通常不是您要连接到的唯一位置,而且这些附加的位置可能会也可能不会采取与PyPI相同的预防措施。在

来源:我是一个核心pip开发人员和PyPI管理员。在

我读了现有的讨论,想好了,我现在该怎么办?在

后来我意识到,我遇到的根本问题是我使用的是Ubuntu14.04,它提供的python版本有缺陷。所以我升级到15.04。在

相关问题 更多 >