OS X上的Python和OpenSSL版本参考问题

时间:2016-06-07 21:54:04

标签: python macos ssl openssl version

尝试解决我遇到的OpenSSL版本问题。

我的Mac上似乎有三个不同版本的OpenSSL。

  1. Python 2.7.11的版本为0.9.7m:

    python -c "import ssl; print ssl.OPENSSL_VERSION"
    OpenSSL 0.9.7m 23 Feb 2007
    
  2. 在终点站:

    openssl version
    OpenSSL 1.0.1h 5 Jun 2014
    
  3. 最近编译/安装:

    /usr/local/ssl/bin/openssl
    OpenSSL> version
    OpenSSL 1.0.2h  3 May 2016
    OpenSSL>
    
  4. 我最近将OS X升级到10.11.5。在此过程中,导致以前工作的python脚本出现问题。以下是错误消息摘录:

    Python错误消息:

     You are linking against OpenSSL 0.9.8, which is no longer *
     RuntimeError: You are linking against OpenSSL 0.9.8, which is no longer support by the OpenSSL project. You need to upgrade to a newer version of OpenSSL.
    

    (* - 是的,这就是错误信息的样子。它会在句子中间修剪。)

    非常感谢有关解决此问题的任何建议。我想要的是让Python引用OpenSSL版本1.0.2h与过时版本0.9.7m。

    我已尝试多次使用各种帖子/博客安装Python和OpenSSL,但没有任何运气。

5 个答案:

答案 0 :(得分:16)

将此作为解决方法使用:

export CRYPTOGRAPHY_ALLOW_OPENSSL_098=1

这似乎是最近对hazmat加密库的检查。您可以在以下位置查看源代码:

https://github.com/pyca/cryptography/blob/master/src/cryptography/hazmat/bindings/openssl/binding.py#L221

如果您愿意承担风险,CRYPTOGRAPHY_ALLOW_OPENSSL_098环境变量会将错误降级为弃用警告。我在过去的一天也在OS X上遇到了这个问题,所以最近发生了一些变化。

答案 1 :(得分:6)

您可以安装使用较新版本openssl的python版本。

首先,您可以brew安装新版本的开放SSL

brew update
brew install openssl
brew link --force openssl

您应该会看到

的新版本
openssl version -a

然后你可以安装不同版本的python,它使用较新版本的openssl。如果您使用pyenv,那将是:

CFLAGS="-I$(brew --prefix openssl)/include" \
LDFLAGS="-L$(brew --prefix openssl)/lib" \
pyenv install -v 3.4.3

您可以在此处找到有关安装brew安装版本的openssl的python版本的更多信息:https://github.com/yyuu/pyenv/wiki/Common-build-problems

答案 2 :(得分:-1)

这个问题几乎杀了我!!!! 最后我的家伙解决了这个问题,只是将套餐“paramiko”的版本从2. *降低到1. *(就像我设置的1.15.4一样)可以解决!

答案 3 :(得分:-1)

如果您收到You are linking against OpenSSL 1.0.0,请使用export CRYPTOGRAPHY_ALLOW_OPENSSL_098=1环境变量绕过它。谢谢@braddock

答案 4 :(得分:-2)

没有解决,上述任何一项都不适合我。我最终采取了一种更简单,更简单的方法......

  1. 从官方网站安装python 2.7.13,它实际安装为默认的python,替换旧的python系统。
  2. https://www.python.org/downloads/mac-osx/

    1. 安装python后升级openssl。
    2. sudo pip install --upgrade pyOpenSSL

      1. 你必须重新安装所有的python模块(因为你替换了python),我强烈建议使用pip。经过几分钟的pip安装后,我的默认OSX python升级了,我的openssl升级了,我的所有模块(包括django都在运行)。