2017-02-08 2 views
4

Ich versuche, Let's Encrypt Zertifikat mit Certbot zu erneuern. Es hat aufgehört zu arbeiten und ich weiß nicht warum. Hier ist der Fehler:undefined Symbol: OPENSSL_sk_num

ImportError: /root/.local/share/letsencrypt/local/lib/python2.7/site-packages/cryptography/ 
hazmat/bindings/_openssl.so: undefined symbol: OPENSSL_sk_num 

I neueste OpenSSL-Version installiert haben

OpenSSL 1.1.0d 26 Jan 2017 

ich das Debuggen dieses Problem versucht, indem Sie folgendermaßen vorgehen. Zuerst habe ich gerade versucht, Import OpenSSL in Python-Konsole hinzuzufügen. Es hat perfekt funktioniert, keine Fehler. Aber wenn ich versuche,

. ~/.local/share/letsencrypt/bin/activate 

Dann >>> import OpenSSl ich Fehler:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/OpenSSL/__init__.py", line 8, in <module> 
    from OpenSSL import rand, crypto, SSL 
    File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/OpenSSL/rand.py", line 12, in <module> 
    from OpenSSL._util import (
    File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/OpenSSL/_util.py", line 6, in <module> 
    from cryptography.hazmat.bindings.openssl.binding import Binding 
    File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/binding.py", line 14, in <module> 
    from cryptography.hazmat.bindings._openssl import ffi, lib 
ImportError: /root/.local/share/letsencrypt/local/lib/python2.7/site-packages/cryptography/hazmat/bindings/_openssl.so: undefined symbol: OPENSSL_sk_num 

Ich versuchte, den /root/.local/share/letsencrypt/ Weg zu entfernen versuchte dann wieder certbot-Auto zu laufen. Trotzdem bekomme ich den gleichen Fehler. Gibt es jemanden, der mit diesem Problem konfrontiert war und die Lösung kannte? Bitte helfen Sie mir hier draußen. Müssen einige wenige Zertifikate erneuern.

UPDATE:

I'v fand das Problem Quelle, die dort in /lib/x86_64-linux-gnu Verzeichnis eine alte Version von libssl.so.1.0.0 ist und es nicht OPENSSL_sk_num hat. Wenn ich versuche, durch neuere Version libssl1.1 zu ersetzen (es hat OPENSSL_sk_num), dann erhalte ich einen Fehler, der OPENSSL_VERSION 1.0.1 erfordert. Dann, nach einiger Mühe, die Bibliotheken aus/usr-Verzeichnissen und lokalen Verzeichnissen löscht, erhalte ich den Fehler ImportError: libssl.so.1.0.0: cannot open shared object file: No such file or directory. Wie kann ich es ändern, so Letsencrypt verwendet neuere Bibliothek?

SOLUTION

Nach einigem Kampf. Ich habe gerade OpenSSL Version 1.1.0c neu installiert. Kopierte letsencrypt Bibliothek von einem anderen Projekt und es funktionierte. Ich denke, ein Upgrade hat es ruiniert. Also schlage ich jedem vor, wenn Sie Letsencrypt laufen lassen - benutzen Sie einfach die Option --no-self-upgrade.

LÖSUNG UPDATE

Nachdem dieses Problem noch einmal begegnete ich beschlossen, es der richtige Weg zu lösen. Also im Grunde brauchen Sie OpenSSL 1.1.0c mit Befehl neu kompilieren:

./config -Wl,--enable-new-dtags,-rpath,'$(LIBRPATH)' und make

Kopieren Sie die kompilierten libcrypto.so.1.1 und libssl.so.1.1-/usr/lib/x86_64-linux-gnu

Dann müssen Sie wiederholen oder nur libcrypto und libssl Symlinks ändern. Durch Eingabe in den Ordner /usr/lib/x86_64-linux-gnu geben Sie die Befehle ln -s libssl.so.1.1 libssl und ln -s libcrypto.so.1.1 libcrypto ein.

Geben Sie anschließend folgenden Befehle:

cd ~/.local/share/letsencrypt/bin/ 
./pip uninstall cryptography pyopenssl -y 
./pip install --upgrade pip 
rm -rf ~/.cache/ 
./pip install cryptography pyopenssl 

Und your'e getan, sollte alles korrekt funktionieren.

+0

Nur eine Vermutung, aber fallen zurück auf OpenSSL 1.0.2 Linie. In 1.1.0 haben sich viele Symbole geändert und einige Sichtbarkeiten wurden geändert. OpenSSL 1.0.2 und OpenSSL 1.1.0 sind * nicht * binärkompatibel. – jww

+0

Ich weiß nicht, wie ich die neue Version komplett aus der Distribution lösche. Weil ich alles gelöscht habe, was ich mit dem Befehl whereis openssl gefunden habe. Dann lief der Befehl apt-get remove openssl. Dann einfach mit apt-get install openssl installiert. Jetzt ist meine Version OpenSSL 1.0.1f 6 Jan 2014 kann noch nicht erneuert werden. Irgendwelche Ideen? –

+0

@ ŽygimantasBaranauskas Ist es immer noch der gleiche Fehler? – glibdud

Antwort

0

Ich hatte auch die undefined symbol: OPENSSL_sk_num Fehler nach dem Zusammenstellen von openssl mich. Ich könnte das Problem lösen, indem Sie das OpenSSL-Verzeichnis in ~/.local/share entfernen, das erlier erstellt und neu gestartet wurde. Es muss ein Caching und/oder ein falscher Bibliothekspfad vorliegen.

+0

Auch das versucht. Hat mir damals nicht geholfen. –

0

Ich habe diesen Fehler bei der Installation von Python3.6.2 auf Centos 7 festgestellt, es wurde in openssl 1.0.1e installiert und ich lade openssl 1.1.0.e herunter. nach den nächsten Schritten funktioniert es richtig.

cd ${openssl_src_path} 

in meinem Fall $ {} openssl_src_path ist '/usr/local/server/openssl-1.1.0e'

./configure --prefix=/usr/local --openssldir=/usr/local/openssl 

make 
make test 
make install 

nach OpenSSL korrekt installiert ist, installieren Python3.6.2

cd ${python_src_path}/Modules 

modify 'Setup' Datei, Änderungsprotokoll:

SSL=/usr/local/openssl 
_ssl _ssl.c \ 
    -DUSE_SSL -I/usr/local/openssl/include -I/usr/local/openssl/include/openssl \ 
    -L/usr/local/openssl/lib -lssl -lcryptoere 

'SSL=/usr/local/openssl' is value of install OpenSSL parameter '--openssldir' .and make sure DUSE_SSL directory exist.

cd ${python_src_path} 
./configure 
make 
make install 

hoffen, dass es helfen.

0

Es sieht aus wie in Version 1.1.0f von openssl das Symbol OPENSSL_sk_num hat sich zu libcrypto.a verschoben. Der Build von Python 3 schien das nicht zu verbinden, daher das fehlende Symbol. Ich habe mich jedoch geirrt. Wenn die Datei Modules/Setup.dist geändert wird, um eine eigene Version von openssl zu erhalten, müssen Sie sie in Modules/Setup kopieren, andernfalls wird die bereits installierte ssl verwendet.

Verwandte Themen