web-dev-qa-db-de.com

Openssl in python 2.7 aktualisieren

ich frage mich, ob jemand erklären kann, wie openssl in python2.7 funktioniert .. Ich bin nicht sicher, ob python ein eigenes openssl hat oder es von der lokalen Maschine/Umgebung abholt.

lassen Sie mich erklären: (wenn ich das in Python mache)

>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 0.9.8x 10 May 2012'

(Im Terminal)

$ openssl version
OpenSSL 0.9.8x 10 May 2012
$ which openssl 
/usr/bin/openssl

jetzt habe ich openssl aktualisiert (heruntergeladen.)

$ cd openssl-1.0.1c
$ ./Configure darwin64-x86_64-cc --prefix=/usr --openssldir=/opt/local/etc/openssl shared
$ make
$ Sudo make install

dadurch wurde ein separater Director erstellt (wie angegeben), also habe ich ihn in den alten Pfad kopiert 

cp -f /usr/local/ssl/bin/openssl /usr/bin/openssl

jetzt in terminal openssl version wurde aber nicht von python aktualisiert!

$ openssl version
OpenSSL 1.0.1c 10 May 2012

Mir ist aufgefallen, dass .dylib immer noch auf die alte Version verweist. Wie kann ich das ändern?

$ ls -l /usr/lib/*ssl*
-rwxr-xr-x  1 root  wheel  411680 Jul 17  2012 /usr/lib/libssl.0.9.7.dylib
-rwxr-xr-x  1 root  wheel  602800 May 24 03:43 /usr/lib/libssl.0.9.8.dylib
-rwxr-xr-x  1 root  wheel  390908 Sep  9 17:37 /usr/lib/libssl.1.0.0.dylib
lrwxr-xr-x  1 root  wheel      18 Jul 17  2012 /usr/lib/libssl.dylib -> libssl.0.9.8.dylib

Update: Ich habe den Link geändert und bei Python noch eine alte Version erhalten.

$ ls -l /usr/lib/*ssl*
-rwxr-xr-x  1 root  wheel  411680 Jul 17  2012 /usr/lib/libssl.0.9.7.dylib
-rwxr-xr-x  1 root  wheel  602800 May 24 03:43 /usr/lib/libssl.0.9.8.dylib
-rwxr-xr-x  1 root  wheel  390908 Sep  9 17:37 /usr/lib/libssl.1.0.0.dylib
lrwxr-xr-x  1 root  wheel      18 Sep 11 15:47 /usr/lib/libssl.dylib -> libssl.1.0.0.dylib
24
Peter

Bitte beziehen Sie sich auf http://rkulla.blogspot.kr/2014/03/the-path-to-homebrew.html

Nach dem Upgrade von openssl auf 1.0.1j durch Homebrew auf MAC, aber der Systempython bezog sich immer noch auf die alte Version 0.9.8. Es stellte sich heraus, dass der Python sich auf openssl bezieht. Ich habe also neuen Python mit gebrautem OpenSL installiert und diese Ausgabe auf Mac, Ubuntu noch nicht abgeschlossen.

Bei Mac OS X Version 10.10 und System Python Version 2.7.6 verfahren Sie wie folgt:

$ brew update

$ brew install openssl

Dann können Sie die openssl Version 1.0.1j sehen.

$ brew link openssl --force 

$ brew install python --with-brewed-openssl    

Sie müssen neuen Python mit gebrautem OpenSSL installieren. Dann können Sie /usr/local/Cellar/python/2.7.8_2/bin/python sehen. 

$ Sudo ln -s /usr/local/Cellar/python/2.7.8_2/bin/python /usr/local/bin/python 

Natürlich sollte/usr/local/* $ USER gehören, nicht root, was von Ryan gesagt wird, aber ich habe 'Sudo' verwendet. Und vor dieser Anweisung hatte ich nicht/usr/local/bin/python. Nach dieser Anweisung können Sie Python-Version 2.7.8 nicht 2.7.6 verwenden.

Schließlich können Sie wie unten sehen;

$ python --version  
Python 2.7.8

$ python -c "import ssl; print ssl.OPENSSL_VERSION"
OpenSSL 1.0.1j 15 Oct 2014

Bis jetzt arbeite ich daran an Ubuntu 12.04. Wenn ich eine Lösung für Ubuntu 12.04 habe, werde ich meine Antwort aktualisieren. Ich hoffe, dieses Verfahren hilft Ihnen.

33
user2434741

Veraltetes SSL ist ein häufiges Problem auf mehreren Plattformen:

Hier ist der allgemeine Ansatz ... 

0. Installieren Sie OpenSSL

  • Option I: Installieren Sie Systempakete nebeneinander liegender OpenSSL 1.x-Libs-Pakete (-dev oder -devel).

    # FreeBSD
    
    pkg install openssl
    OPENSSL_ROOT=/usr/local
    
    
    # Mac (brew)
    
    brew install openssl # DO NOT DO ANY WEIRD SYMLINK HACKS, ITS KEG-ONLY FOR A REASON!
    OPENSSL_ROOT="$(brew --prefix openssl)"
    
  • Option II: Installiert OpenSSL von der Quelle in ein temporäres Verzeichnis

    OPENSSL_ROOT="$HOME/.build/openssl-1.0.1e"
    
    curl http://www.openssl.org/source/openssl-1.0.1e.tar.gz | tar zxvf -
    cd openssl-1.0.1e
    mkdir -p "$OPENSSL_ROOT"
    ./config no-hw --prefix="$OPENSSL_ROOT" --openssldir=...
    # osx (instead of previous line): ./Configure darwin64-x86_64-cc no-hw --prefix="$OPENSSL_ROOT" --openssldir=...
    make install
    cd ..
    rm -rf openssl-1.0.1e
    

1. Python aus Quelle erstellen

  • Option A: Verwenden Sie pyenv :

    export CONFIGURE_OPTS="CPPFLAGS=-I"$OPENSSL_ROOT"/include LDFLAGS=-L"$OPENSSL_ROOT"/lib [your other options here]"
    pyenv install 2.7.6
    
  • Option B: Installiere Python von der Quelle

    ./configure CPPFLAGS="-I$OPENSSL_ROOT/include" LDFLAGS="-L$OPENSSL_ROOT/lib" [your other options here]`
    make
    # ...
    # if compiled openssl was used, it can be safely deleted because python's module ssl links openssl statically.
    

Beispiel: FreeBSD 9.2 (make install zu Demonstrationszwecken überspringen)

pkg install openssl curl gmake gdbm sqlite3 readline ncurses
OPENSSL_ROOT=/usr/local
curl http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz | tar jxvf -
cd Python-2.7.6
./configure CPPFLAGS="-I$OPENSSL_ROOT/include" LDFLAGS="-L$OPENSSL_ROOT/lib" [your other options here]
make
./python -c 'import ssl; print(ssl.OPENSSL_VERSION)' # osx: ./python.exe ...
# prints: OpenSSL 1.0.1e 11 Feb 2013

Danach werden temporäre openssl-Bibliotheken nicht mehr benötigt, da das ssl-Modell mit openssl statisch in die ausführbare Python-Datei (prüft mit otool oder readelf).

17
Barry

Dies kann an einer veralteten Version von Python liegen.

Nachdem ich python -c "import ssl; print ssl.OPENSSL_VERSION" auf Python 2.7.1 ausgeführt hatte, sah ich, dass ich diese veraltete Version hatte: OpenSSL 0.9.7l 28 Sep 2006.

Es hat den Anschein, dass meine Version von Python von einer veralteten Version von OpenSSL abhängt, wie durch dieses Forum angegeben :

Für die kommende Version von Python 2.7.9 (geplant für Anfang Dezember), ich habe vor, die Pythons in der python.org OS X-Installationsprogramme verwenden eigene Versionen von OpenSSL und daher keine hängen mehr vom jetzt veralteten System OpenSSL ab.

Ich habe auf Python 2.7.9 aktualisiert und das Problem wurde sofort behoben. Nachdem ich python -c "import ssl; print ssl.OPENSSL_VERSION" ausgeführt habe, erhalte ich OpenSSL 0.9.8za 5 Jun 2014.

4
aralar

Ich denke, Python hat erkannt, dass dies ein Problem ist: https://www.python.org/downloads/release/python-2715/

Hinweis

Achtung macOS-Benutzer: Ab 2.7.15 alle macOS-Installer von python.org Schiff mit einer eingebauten Kopie von OpenSSL. Zusätzlich gibt es ein neues zusätzliche Installationsvariante für macOS 10.9+, die eine integrierte .__ enthält. Version von Tcl/Tk 8.6. Weitere Informationen finden Sie im Installationsprogramm README.

Durch die Installation von 2.7.15 wurden meine Probleme mit OpenSSL behoben.

1
KeelyD

Folgendes hat für mich gearbeitet. Ich war bereits in der Lage, OpenSSL von 0.9.8zh auf eine 1.0.2o-Version zu aktualisieren, aber der Zugriff auf die neuere Version durch Python erfolgte nicht, bis der Vorschlag gefunden wurde, pyenv zur Neuinstallation von Python zu verwenden (mit 2.7.10 die gewünschte Version).

brew update
brew install pyenv

echo 'eval "$(pyenv init -)"' >> .bashrc
source .bashrc

pyenv install 2.7.10
pyenv global 2.7.10

und dann zu überprüfen ...

python --version
Python 2.7.10

python -c 'import ssl; print ssl.OPENSSL_VERSION'
OpenSSL 1.0.2o  27 Mar 2018

Ich musste natürlich Python-Pakete neu installieren.

Quelle: https://github.com/ianunruh/hvac/issues/75

1
bkinnell