Certbot: ImportError: Modul 'pyOpenSSL' fehlt erforderliche Funktionalität

Erstellt am 17. Apr. 2017  ·  35Kommentare  ·  Quelle: certbot/certbot

Mein Betriebssystem ist (inklusive Version):

CentOS Linux-Version 7.3.1611

Ich habe Certbot installiert mit (certbot-auto, OS-Paketmanager, pip usw.):

OS-Packager-Manager

Ich habe diesen Befehl ausgeführt und er hat diese Ausgabe erzeugt:

certbot erneuern

Traceback (letzter Anruf zuletzt):
Datei "/bin/certbot", Zeile 7, in
von certbot.main import main
Datei "/usr/lib/python2.7/site-packages/certbot/main.py", Zeile 17, in
vom certbot-Import-Client
Datei "/usr/lib/python2.7/site-packages/certbot/client.py", Zeile 10, in
vom acme-Import-Client als acme_client
Datei "/usr/lib/python2.7/site-packages/acme/client.py", Zeile 31, in
request.packages.urllib3.contrib.pyopenssl.inject_into_urllib3() # Typ: ignorieren
Datei "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", Zeile 112, in inject_into_urllib3
_validate_dependencies_met()
Datei "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", Zeile 147, in _validate_dependencies_met
raise ImportError("'pyOpenSSL'-Modul fehlt erforderliche Funktionalität. "
ImportError: Modul 'pyOpenSSL' fehlt erforderliche Funktionalität. Versuchen Sie, auf v0.14 oder neuer zu aktualisieren.

Das Verhalten von Certbot unterschied sich von dem, was ich erwartet hatte, weil:

Es sollte erfolgreich anstelle von Fehlern erneuert werden.

Hier ist ein Certbot-Protokoll, das das Problem zeigt (falls verfügbar):

Protokolle werden standardmäßig in /var/log/letsencrypt gespeichert. Sie können Domains, E-Mail- und IP-Adressen nach Belieben schwärzen.

Keine Logeinträge. Ich habe pyopenssl entfernt und neu installiert.

pip show pyOpenssl

Name: pyOpenSSL
Version: 16.2.0
Zusammenfassung: Python-Wrapper-Modul um die OpenSSL-Bibliothek
Homepage: https://pyopenssl.readthedocs.io/
Autor: Hynek Schlaback
Autoren-E-Mail: [email protected]
Lizenz: Apache-Lizenz, Version 2.0
Speicherort: /usr/lib64/python2.7/site-packages
Benötigt: sechs, Kryptographie

Aber der Fehler besteht weiterhin. Irgendeine Idee ?

pkging

Hilfreichster Kommentar

Leute, mischt nicht yum installierte Pakete mit pip Paketen. Die richtige Lösung besteht darin, pip-Pakete zu entfernen und alles von yum installieren. Ich habe es hier skizziert.

Sie benötigen kein neueres pyOpenSSL auf CentOS 7, um certbot auszuführen! Um nicht zu sagen, dass das Verlassen auf dritte Pakete Sie letztendlich zu nichts Gutem führt :)

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

Alle 35 Kommentare

Möglicherweise gibt es mehrere pyOpenSSL-Versionen, so dass urllib3 verwirrt wird. In /usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py sollten sich folgende Zeilen befinden:

    # pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509
    # attribute is only present on those versions.
    from OpenSSL.crypto import X509
    x509 = X509()
    if getattr(x509, "_x509", None) is None:
        raise ImportError("'pyOpenSSL' module missing required functionality. "
                          "Try upgrading to v0.14 or newer.")

Könnten Sie einige Debugging-Codes hinzufügen und sehen, was die Ausgabe ist?

    # pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509
    # attribute is only present on those versions.
    import OpenSSL.crypto
    print(OpenSSL.crypto)
    from OpenSSL.crypto import X509
    x509 = X509()
    if getattr(x509, "_x509", None) is None:
        raise ImportError("'pyOpenSSL' module missing required functionality. "
                          "Try upgrading to v0.14 or newer.")

Beachten Sie, dass Python Tabs nicht mag. Fügen Sie immer Leerzeichen für die Identifizierung ein. Außerdem benötigen Sie root, um diese Datei zu ändern.

Hier ist die Ausgabe:

certbot erneuern



Traceback (letzter Anruf zuletzt):
Datei "/bin/certbot", Zeile 7, in
von certbot.main import main
Datei "/usr/lib/python2.7/site-packages/certbot/main.py", Zeile 17, in
vom certbot-Import-Client
Datei "/usr/lib/python2.7/site-packages/certbot/client.py", Zeile 10, in
vom acme-Import-Client als acme_client
Datei "/usr/lib/python2.7/site-packages/acme/client.py", Zeile 31, in
request.packages.urllib3.contrib.pyopenssl.inject_into_urllib3() # Typ: ignorieren
Datei "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", Zeile 112, in inject_into_urllib3
_validate_dependencies_met()
Datei "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", Zeile 149, in _validate_dependencies_met
raise ImportError("'pyOpenSSL'-Modul fehlt erforderliche Funktionalität. "
ImportError: Modul 'pyOpenSSL' fehlt erforderliche Funktionalität. Versuchen Sie, auf v0.14 oder neuer zu aktualisieren.

/usr/lib64/python2.7/site-packages/OpenSSL/crypto.so

Dieser Pfad sieht aus wie aus einem früheren pyOpenSSL-Paket. Könnten Sie pyOpenSSL über yum entfernen und es erneut versuchen?

Ich habe das gleiche Problem mit centos7. Das Entfernen von pyOpenSSL.x86_64 0:0.13.1-3.el7 hilft nicht, da yum install certbot es erneut installieren wird.

Ich habe jedoch einen Workaround für die kaputte RPM gefunden:

yum remove pyOpenSSL.x86_64
cd
mkdir virtualenv
cd virtualenv/
virtualenv --no-site-packages -p /usr/bin/python2.7 certbot
. ~/virtualenv/certbot/bin/activate
pip import six packaging appdirs
pip install setuptools --upgrade                                                                                                                                                                                    pip install certbot
certbot help

Gleiches Problem hier bei einer neuen Centos-Installation.

rpm --query centos-release  # centos-release-7-3.1611.el7.centos.x86_64
wget ftp://ftp.muug.mb.ca/mirror/centos/7.3.1611/cloud/x86_64/openstack-mitaka/common/pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo rpm -Uvh pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo yum install certbot
certbot renew  # OK

Ich denke, dies ist eher ein CentOS-Problem als das von Certbot. Kann jemand CentOS melden, dass sein pyOpenSSL zu alt ist?

Das Problem bestand auf meinem System auch nach einem Upgrade auf pyOpenSSL 16.something

Das gleiche Problem trat kürzlich auf meinem CentOS 7-Computer auf.
Die einzige funktionierende Problemumgehung ist pip install pyOpenSSL=0.13.1

Die letzten zwei Monate ist es gescheitert.
Und ich habe es gerade noch einmal versucht, es ist wieder fehlgeschlagen.

Die Ausgabe:

>> sudo certbot certonly --standalone -d mydomain.com

<< Traceback (most recent call last):
  File "/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.12.0', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
  File "/usr/lib/python2.7/site-packages/certbot/main.py", line 21, in <module>
    from certbot import client
  File "/usr/lib/python2.7/site-packages/certbot/client.py", line 10, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 31, in <module>
    requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()
  File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 112, in inject_into_urllib3
    _validate_dependencies_met()
  File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 147, in _validate_dependencies_met
    raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

Dann versuche ich das und es funktioniert:

_20170502100430

Der Link der Antwort: https://serverfault.com/questions/830284/certbot-for-letsencrypt-missing-pyopenssl-module

Nur als Referenz ... es ist im Allgemeinen unsicher, pyOpenSSL über pip auf CentOS zu aktualisieren, da es möglich ist, Yum auf diese Weise zu zerstören.

Welches certbot-Paket verwendest du? Ich würde es begrüßen, wenn Sie 0.13.0 von epel-testing installieren und immer sicherstellen könnten, dass Ihr System über ein vollständiges Yum-Update verfügt.

Möglicherweise müssen Sie yum reinstall pyOpenSSL verwenden, um Ihr System zu reparieren (prüfen Sie den Status mit rpm -qV pyOpenSSL).

Es gibt ein Problem mit dem systemd Renew Timer mit diesem Paket, weshalb ich es nicht stabil gemacht habe, sondern nur certbot-Anfragen und eine manuelle certbot-erneuerung funktionieren wird.

Die Version 0.14.0 ist auch auf dem Weg ... und ich habe das buchstäblich gerade in AWS getestet.

Ich bin neugierig - der ursprüngliche Autor hat es über einen Paketmanager installiert, also wo würden wir eine Version für pip anheften?
Haben die Leute immer noch dieses Problem? Und wenn ja, welche Installationsmethode verwenden Sie?

Vielleicht möchten Sie die in diesem Dockerfile beschriebene Methode ausprobieren, die bei mir funktioniert hat:
https://github.com/identinetics/docker-nginx/blob/master/Dockerfile#L65

Das Problem besteht immer noch bei frisch installiertem und aktualisiertem centOS 7.3.
Das Problem wurde behoben, indem das aktualisierte pyOpenSSL-RPM installiert wurde (pyOpenSSL-0.14-3.fc222 schien genug zu sein, während pyOpenSSL-16.2.0-1.fc25 nicht funktionierte), aber wie kann man sicher sein, dass nichts anderes kaputt geht?!

https://www.rpmfind.net/linux/rpm2html/search.php?query=pyOpenSSL

Vielen Dank

@tisc0 Ich bin sehr daran interessiert, genau zu

Als ich die centos7 certbot-Pakete erstellt habe, habe ich sie ohne Probleme in AWS getestet - sicherlich nicht das, was Sie beschrieben haben oder dieses Problem beschreibt.

Es ist eine schreckliche Idee, ein solches Fedora-RPM direkt auf centos7 zu installieren - insbesondere mit einem Kernpaket wie pyOpenSSL.

Hallo Hogarthj,
Entschuldigung für den Mangel an Details, irgendwie beschäftigt in diesen Tagen :)
Zusamenfassend :

  • die Installation des Fedora-RPM hat das Problem nicht gelöst (nur der certbot --help funktionierte, soweit ich mich erinnere)
  • Nachdem ich lange mit den Paketen gespielt und überprüft hatte, dass es tatsächlich in einem anderen neuen Centos 7 (ohne die Box-Pakete) funktionierte, installierte ich sie neu und bekam schließlich einen weiteren Fehler über urllib3 (auch die Aufforderung, eine aktualisierte Version zu installieren, die Ich habe nicht gekauft ;]).
  • Ich beschloss, urllib3 mit yum (anstatt mit rpm -e) und allen abhängigen Paketen zu entfernen/neu zu installieren; in diesem Fall werden einige gängige Pakete auch vom ipa-client benötigt...
  • Ich habe urllib3 und certbot (in dieser Reihenfolge) neu installiert: es hat funktioniert
  • Ich habe endlich den ipa-client neu installiert und es funktioniert jetzt.

[ root@c7-dse ~]# echo N | yum python-urllib3 entfernen | awk '{print $1}'
(...)
Abhängigkeiten

==============
Paket
Entfernen:
python-urllib3
Entfernen
certbot
ipa-client
Python-Anfragen
python2-acme
python2-certbot
python2-ipaclient
python2-ipalib

Jede Idee, um zu erklären, warum es durch die Neuinstallation einiger Pakete funktioniert hat, ist willkommen :)

@tisc0 danke für die zusätzlichen Details

Das Erzwingen der Installation/Entfernung von Paketen kann oft zu Problemen führen - ebenso wie pip-Upgrades von Systembibliotheken.

Es ist selten eine gute Idee, einfach ein Fedora-Paket für die CentOS-Nutzung zu besorgen, ohne das Paket selbst aus der src.rpm neu zu erstellen

Durch die Neuinstallation von Paketen (anstatt ein Entfernen und Installieren mit Abhängigkeitsproblemen durchzuführen, kann eine Neuinstallation von Yum ein Lebensretter sein) wird überprüft, ob die Originaldateien vorhanden sind.

Ich freue mich sehr zu hören, dass die Neuinstallation der CentOS-Pakete für Sie funktioniert :)

Da @tisc0 jetzt ein funktionierendes Setup zu haben scheint, werde ich dieses Problem schließen. Wenn jemand immer noch Probleme hat, bitte ein neues Problem melden, da dieser Thread ziemlich voll wird.

für CentOS7, tun Sie einfach "mv /usr/lib64/python2.7/site-packages/OpenSSL /usr/lib64/python2.7/site-packages/pyOpenSSL", und das funktioniert für mich wie ein Zauber!!!

Schmutziger Hack :1st_place_medal: ;)

Hatte gerade das gleiche Problem, das liegt daran, dass pip install -U die vom RPM installierten Python-Module überschrieben hat.

Um dies zu lösen habe ich folgendes gemacht:

Ausgabe

  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 147, in _validate_dependencies_met
    raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

Lösung

[root<strong i="12">@kolla</strong> ~]# rpm -qf /usr/lib64/python2.7/site-packages/OpenSSL/
pyOpenSSL-0.13.1-3.el7.x86_64
[root<strong i="13">@kolla</strong> ~]# rpm -qf /usr/lib/python2.7/site-packages/urllib3
python-urllib3-1.10.2-2.el7_1.noarch

[root<strong i="14">@kolla</strong> ~]# rpm --nodeps -e python-urllib3
[root<strong i="15">@kolla</strong> ~]# rm -rf /usr/lib/python2.7/site-packages/urllib3/
[root<strong i="16">@kolla</strong> ~]# yum -y install python-urllib3

Ausgabe

  File "/usr/lib/python2.7/site-packages/requests/__init__.py", line 90, in <module>
    from urllib3.exceptions import DependencyWarning
ImportError: cannot import name DependencyWarning
[root<strong i="20">@kolla</strong> ~]# rpm -qf /usr/lib/python2.7/site-packages/requests
python-requests-2.6.0-1.el7_1.noarch

Lösung

[root<strong i="24">@kolla</strong> ~]# rpm --nodeps -e python-requests
[root<strong i="25">@kolla</strong> ~]# rm -rf /usr/lib/python2.7/site-packages/requests
[root<strong i="26">@kolla</strong> ~]# yum -y install python-requests   

Update vom 29.01.2018:

Ich bin wieder auf das gleiche Problem gestoßen, diesmal war es viel einfacher, den Docker-Container zu verwenden :)

alias certbot='docker run --rm -ti -v /etc/letsencrypt:/etc/letsencrypt -p 80:80 certbot/certbot:v0.21.1'

@cnritng Bei mir

Wer dieses Problem immer noch hat, probiert folgendes aus:

rpm --query centos-release  # centos-release-7-3.1611.el7.centos.x86_64
wget ftp://ftp.muug.ca/mirror/centos/7/cloud/x86_64/openstack-newton/common/pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo rpm -Uvh pyOpenSSL-0.15.1-1.el7.noarch.rpm
sudo yum install certbot
certbot renew  # OK

von @sulliwane . Beachten Sie, dass sich die Adresse ftp://ftp.muug.ca/mirror/... geändert hat.

Danke @JellyBool

Leute, mischt nicht yum installierte Pakete mit pip Paketen. Die richtige Lösung besteht darin, pip-Pakete zu entfernen und alles von yum installieren. Ich habe es hier skizziert.

Sie benötigen kein neueres pyOpenSSL auf CentOS 7, um certbot auszuführen! Um nicht zu sagen, dass das Verlassen auf dritte Pakete Sie letztendlich zu nichts Gutem führt :)

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

Die obigen Schritte von @dvershinin haben es bei mir geschafft

hat auch funktioniert mit dem, was @dvershinin gepostet hat. musste nur die letzte Zeile von "yum reinstall python-urllib3" in "yum install python-urllib3" ändern

für CentOS7, tun Sie einfach "mv /usr/lib64/python2.7/site-packages/OpenSSL /usr/lib64/python2.7/site-packages/pyOpenSSL", und das funktioniert für mich wie ein Zauber!!!

Das *nix-ähnliche System hat immer die ähnlichen Probleme: Dateiabhängigkeit gebrochen.

Leute, mischt nicht yum installierte Pakete mit pip Paketen. Die richtige Lösung besteht darin, pip-Pakete zu entfernen und alles von yum installieren. Ich habe es hier skizziert.

Sie benötigen kein neueres pyOpenSSL auf CentOS 7, um certbot auszuführen! Um nicht zu sagen, dass das Verlassen auf dritte Pakete Sie letztendlich zu nichts Gutem führt :)

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

Dankeschön! Es ist Arbeit!

@dvershinin Fix funktioniert derzeit nicht für mich - nachdem ich die Schritte ausgeführt habe, die er auf Centos 7 beschrieben hat, erhalte ich die folgende Fehlermeldung:

VersionConflict: (urllib3 1.10.2 (/usr/lib/python2.7/site-packages), Requirement.parse('urllib3>=1.20,<1.26'))

@keir-lavelle mein Fix ist nur ein Versuch, ein System in den ursprünglichen Zustand zurückzusetzen, nachdem es schwer beschädigt wurde, indem pip unter einem root Benutzer verwendet wurde (was die Leute bei so vielen Tutorials dazu veranlassen, ohne zu berücksichtigen, dass dies niemals in CentOS/RHEL-Systemen erfolgen sollte!)

Wenn Sie also abenteuerlustig sind, können Sie dem Link folgen, den ich gegeben habe, der versucht, es weiter zu beheben, indem Sie alle Python-Pakete entfernen (wohlgemerkt, yum ist auch Python-basiert), was ein noch dazu gefährliches Unterfangen ist . (weil du mehr kaputt machen kannst).

  • Wenn Sie Ihren Server von einem Snapshot/Backup wiederherstellen können, bei dem certbot funktioniert hat, dann sollte es Ihnen gut gehen
  • Andernfalls scheint "alle Python-Pakete entfernen / neu installieren" die einzige Möglichkeit zu sein, das Problem zu beheben (aber achten Sie darauf, die Konsequenzen zu berücksichtigen, wenn Sie aus irgendeinem Grund yum in einen funktionierenden Zustand bringen können ).

Und natürlich hilft es, sich noch einmal daran zu erinnern: Verwenden Sie keine pip oder python Installationen unter root . So bricht es in erster Linie. Wenn es nicht passierte, würde es nicht brechen.

Vielen Dank, dass Sie sich die Zeit genommen haben, es zu erklären, ich teste im Moment nur Dinge, damit der Server wegwerfbar ist, also keine große Sache, wenn er kaputt geht, aber schätzen Sie die Informationen

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen