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
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.
Veraltetes SSL ist ein häufiges Problem auf mehreren Plattformen:
Hier ist der allgemeine Ansatz ...
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
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.
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
).
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
.
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.
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.