如何在Ubuntu Trusty上安全地使用pip(使用SSL)?

时间:2015-04-10 23:25:13

标签: python ubuntu ssl pip

问题是,如何在Ubuntu Trusty上使用pip安全地安装软件包?当然,我需要澄清为什么我认为它不安全。

如果你在Python 2.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

听起来问题出在Python ssl库中。 Pip是否在最新版本中从openssl切换到Python ssl库?我的猜测(也许是一个糟糕的猜测)是pip之前使用过Python库,它只是使用了一个甚至没有发出警告的旧版urllib。所以它一直都是不安全的(虽然特别关注的特殊情况似乎有些近期)。

如果那是的话,那么Ubuntu上的pip库存版本是不安全的。我无法使用它来安全地安装这些东西以确保安全。无论如何,我可以从Ubuntu的repo中安装相同的东西,它使用GPG验证包:

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

除了以上内容仅适用于Utopic。在Trusty上,我似乎陷入困境。

那是什么交易?我是否必须掷骰子并不安全地安装这个东西一次,然后才安全地使用pip?或者我是否完全误读了这种情况?

2 个答案:

答案 0 :(得分:6)

pip默认使用标准库ssl模块(除非你还安装了你提到的额外库)。在Python 2.7.9和Python 3.2之前(我认为它是3.2,可能是3.1)标准库中的ssl模块缺乏控制与ssl相关的某些设置的能力。

其中一些设置:

  • 如果没有明确地固定到TLSv1.0(并且您无法固定到TLSv1.1或TLSv1.2),则无法禁用SSLv3。
  • 您无法禁用TLS压缩。
  • 您不能使用SNI,强制您尝试通话的每个主机都不使用SNI(或者您需要禁用这些主机的TLS验证)。
  • 您不能告诉OpenSSL更喜欢服务器明确指定的链上更短但仍然可信的链。这意味着,如果基础证书存储删除了弱1024位根证书,那么可能会被验证的某些服务器将失败。
  • 即使是较旧的Pythons(2.6),也无法设置密码,这意味着您无法使用OpenSSL作为默认值(通常会导致不安全或不太理想的选择)。

至于你应该做什么,这取决于你。如果您从PyPI本身进行安装,很多这些事情并不重要,因为我们在服务器端禁用它们而不是依靠客户端来实现它们。然而,请求(底层库pip用于访问存储库)会引发这些警告(并且pip不会使它们静音),因为PyPI通常不是您要连接的唯一地方,而这些额外的地方可能会也可能不会PyPI具有相同的预防措施。

资料来源:我是PyPI的核心开发人员和管理员。

答案 1 :(得分:0)

我读了现有的讨论,并且想得很清楚,我现在应该做些什么?

然后我意识到我遇到的根本问题是我在Ubuntu 14.04上,并且它发布的python版本存在缺陷。所以我升级到了15.04。