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

orb*_*ion 7 python ubuntu ssl pip

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

urllib3给出了一个InsecurePlatformWarning如果你在Python 2.7.9之前没有安装一些额外的openssl相关python库的情况下发出https请求.这是一个完善的问答:

InsecurePlatformWarning:真正的SSLContext对象不可用.这可以防止urllib3正确配置SSL

问题是,如果您安装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?或者我是否完全误读了这种情况?

Don*_*fft 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的核心开发人员和管理员.