Certbot: Amazon Linux : ImportError : aucun module nommé cryptography.hazmat.bindings.openssl.binding

Créé le 24 févr. 2016  ·  48Commentaires  ·  Source: certbot/certbot

Lors de la tentative d'exécution sur Amazon Linux : Linux ip #1 SMP Sat Oct 24 01:31:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Hachage de validation Git : 6950dbd0708d3ba16b717ad1097332fc37e33f15

J'obtiens l'erreur suivante :

[ec2-user<strong i="10">@ip</strong> letsencrypt]$ ./letsencrypt-auto
Checking for new version...
Creating virtual environment...
Installing Python packages...
Requesting root privileges to run letsencrypt...
   sudo /home/ec2-user/.local/share/letsencrypt/bin/letsencrypt --no-self-upgrade
Traceback (most recent call last):
  File "/home/ec2-user/.local/share/letsencrypt/bin/letsencrypt", line 7, in <module>
    from letsencrypt.cli import main
  File "/home/ec2-user/.local/share/letsencrypt/local/lib/python2.7/dist-packages/letsencrypt/cli.py", line 21, in <modul
e>
    import OpenSSL
  File "/home/ec2-user/.local/share/letsencrypt/local/lib/python2.7/dist-packages/OpenSSL/__init__.py", line 8, in <modul
e>
    from OpenSSL import rand, crypto, SSL
  File "/home/ec2-user/.local/share/letsencrypt/local/lib/python2.7/dist-packages/OpenSSL/rand.py", line 11, in <module>
    from OpenSSL._util import (
  File "/home/ec2-user/.local/share/letsencrypt/local/lib/python2.7/dist-packages/OpenSSL/_util.py", line 6, in <module>
    from cryptography.hazmat.bindings.openssl.binding import Binding
ImportError: No module named cryptography.hazmat.bindings.openssl.binding

Cela fonctionnait depuis le 8 février... Cependant, lorsque vous essayez de récupérer une ancienne version pour trouver où les choses se sont cassées, Letsencrypt-auto continue de se mettre à niveau vers la dernière version !

certbot-auto pyca

Commentaire le plus utile

@utdrmac J'ai rencontré la même erreur il y a quelques instants en déployant un nouveau certificat - votre commentaire a inspiré le correctif hacky suivant, collecté en épluchant l'oignon et en reliant les dépendances au chemin local/lib/python2.7 :

ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cryptography /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/cryptography
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cryptography-2.0.2.dist-info /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/cryptography-2.0.2.dist-info
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cffi /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/cffi
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cffi-1.10.0.dist-info /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/cffi-1.10.0.dist-info
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/_cffi_backend.so /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/_cffi_backend.so
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/.libs_cffi_backend /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/.libs_cffi_backend
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/zope.interface-4.1.3-py2.7-nspkg.pth /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/zope.interface-4.1.3-py2.7-nspkg.pth
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/zope.interface-4.1.3-py2.7.egg-info /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/zope.interface-4.1.3-py2.7.egg-info
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/zope/interface /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/zope/interface

Tous les 48 commentaires

Toute mise à jour .. Je suis également confronté au même problème ..
Ci-dessous les logs (environnement - amazon linux)
Commande émise : ./letsencrypt-auto --help

Checking for new version... Creating virtual environment... Installing Python packages... Installation succeeded. Requesting root privileges to run letsencrypt... sudo /home/ec2-user/.local/share/letsencrypt/bin/letsencrypt --help Traceback (most recent call last): File "/home/ec2-user/.local/share/letsencrypt/bin/letsencrypt", line 7, in <module> from letsencrypt.cli import main File "/home/ec2-user/.local/share/letsencrypt/local/lib/python2.7/dist-packages/letsencrypt/cli.py", line 21, in <module> import OpenSSL File "/home/ec2-user/.local/share/letsencrypt/local/lib/python2.7/dist-packages/OpenSSL/__init__.py", line 8, in <module> from OpenSSL import rand, crypto, SSL File "/home/ec2-user/.local/share/letsencrypt/local/lib/python2.7/dist-packages/OpenSSL/rand.py", line 11, in <module> from OpenSSL._util import ( File "/home/ec2-user/.local/share/letsencrypt/local/lib/python2.7/dist-packages/OpenSSL/_util.py", line 6, in <module> from cryptography.hazmat.bindings.openssl.binding import Binding ImportError: No module named cryptography.hazmat.bindings.openssl.binding

essaye ça
sudo ./letsencrypt-auto --help
J'ai essayé la commande ci-dessus, cela a fonctionné.

Même problème, également résolu en préfixant sudo. Comment se fait-il que ce soit le correctif?

Le même problème s'est produit et résolu à l'aide de sudo, merci

Je rencontre également ce problème après la mise à jour vers le dernier certbot sur Amazon Linux (Linux ip-172-31-10-255 4.9.75-25.55.amzn1.x86_64 #1 SMP vendredi 5 janvier 23:50:27 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux)

Il semble que le package de cryptographie soit installé sous /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cryptography/

mais python ne le trouve pas car il ne cherche pas/n'opère pas en dehors du chemin lib64. Notez que tous les chemins ci-dessous sont /lib/ et non /lib64/

J'ai complètement supprimé cet env rm -rf /opt/eff.org et j'ai réinstallé cert-bot et j'obtiens toujours la même erreur/problème.

` [root@ip-172-31-10-255 venv]# /certbot/certbot-auto --debug renew Error: couldn't get currently installed version for /opt/eff.org/certbot/venv/bin/letsencrypt: Traceback (most recent call last): File "/opt/eff.org/certbot/venv/bin/letsencrypt", line 7, in <module> from certbot.main import main File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/certbot/main.py", line 10, in <module> import josepy as jose File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/josepy/__init__.py", line 41, in <module> from josepy.interfaces import JSONDeSerializable File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/josepy/interfaces.py", line 8, in <module> from josepy import errors, util File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/josepy/util.py", line 4, in <module> import OpenSSL File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/OpenSSL/__init__.py", line 8, in <module> from OpenSSL import rand, crypto, SSL File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/OpenSSL/rand.py", line 12, in <module> from OpenSSL._util import ( File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/OpenSSL/_util.py", line 6, in <module> from cryptography.hazmat.bindings.openssl.binding import Binding ImportError: No module named cryptography.hazmat.bindings.openssl.binding

@utdrmac J'ai rencontré la même erreur il y a quelques instants en déployant un nouveau certificat - votre commentaire a inspiré le correctif hacky suivant, collecté en épluchant l'oignon et en reliant les dépendances au chemin local/lib/python2.7 :

ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cryptography /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/cryptography
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cryptography-2.0.2.dist-info /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/cryptography-2.0.2.dist-info
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cffi /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/cffi
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cffi-1.10.0.dist-info /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/cffi-1.10.0.dist-info
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/_cffi_backend.so /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/_cffi_backend.so
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/.libs_cffi_backend /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/.libs_cffi_backend
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/zope.interface-4.1.3-py2.7-nspkg.pth /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/zope.interface-4.1.3-py2.7-nspkg.pth
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/zope.interface-4.1.3-py2.7.egg-info /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/zope.interface-4.1.3-py2.7.egg-info
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/zope/interface /opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/zope/interface

@HinchK J'y ai pensé aussi mais oui, très hack-y en effet. Découvrez plutôt cette solution : https://github.com/certbot/certbot/issues/1680#issuecomment -358728515 Je vérifie que cela fonctionne sur le dernier haricot élastique.

@HinchK Merci. Cela (temporairement) l'a réparé pour moi. (AWS)

@HinchK , votre solution était incroyable. Merci.

Sonner dans cette solution de

Il s'est cassé lorsque je suis allé mettre à jour mon cert aujourd'hui et que certbot a été mis à jour de 0.19.0 à 0.21.1.

Je viens de rencontrer le problème moi-même, pour la deuxième fois. Cela semble être un problème lorsque certbot exécute des mises à niveau sans autorisations suffisantes. La mise à jour échoue silencieusement, laissant le logiciel dans un mauvais état détecté lorsque certbot essaie de s'exécuter. Une meilleure détection des erreurs dans la routine d'installation/mise à jour de la bibliothèque pourrait aider à éviter toute confusion future.

La solution à laquelle @utdrmac lié ci-dessus a fonctionné pour résoudre ce problème pour moi (mais a dû l'exécuter en tant que root). J'ai eu la même erreur lorsque certbot a essayé de passer à 0.22.0 tout à l'heure (sur AWS EC2).

Je viens de rencontrer à nouveau ce problème dans une autre région AWS ; et peut confirmer que l'installation de https://github.com/certbot/certbot/issues/1680#issuecomment -358728515

Déploiement du pip certbot sur mes instances ; comme ma précédente solution de contournement de lien symbolique était un hack assez grossier qui a fonctionné mais pourrait ne pas fonctionner sur la route.

J'ai rencontré le même problème. Voici ce qui m'a résolu le problème :

/opt/eff.org/certbot/venv/local/bin/pip installer l'interface de cryptographie

après avoir essayé tout le reste, le hack de @HinchK était la seule chose qui a fonctionné pour moi

Je peux également confirmer awls99 - rencontré le même problème ces derniers jours, tout essayé, toutes les solutions n'ont eu aucun effet sur le problème.
@HinchK way a résolu le problème.

La solution

@HinchK un coup un coup! :-)

@gmegidish est l'homme !!!
Merci!!

/opt/eff.org/certbot/venv/local/bin/pip installer l'interface de cryptographie

a fonctionné pour moi !

@alex , une idée de ce qui pourrait se passer ici ?

Nous utilisons actuellement la cryptographie 2.0.2, pyOpenSSL 16.2.0 et les autres épingles dans https://github.com/certbot/certbot/blob/master/letsencrypt-auto-source/pieces/dependency-requirements.txt.

S'il s'agit d'Amazon Linux, je suppose que c'est https://github.com/pypa/pip/issues/4464

cc: @reaperhulk

salut,

J'ai trouvé une solution qui a fonctionné pour moi en CTRL-F le web avec mes yeux.

Sur ce lien, @utdrmac installe directement certbot avec pip.
https://github.com/certbot/certbot/issues/1680#issuecomment -358728515
J'ai travaillé pour moi au moins.

Et oh, pensez à installer des plugins certbot en utilisant pip également pour gérer la configuration automatique de let say nginx (par @bmw ):
https://github.com/certbot/certbot/issues/1736#issuecomment -165189246

Bonne chance !

edit: j'installe également des certificats sur Amazon Linux.

Répondez à nouveau à ce problème, liens de la @eregnier , essayez d'abord, ma crontab ressemble maintenant à :
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/bin/certbot renew --no-bootstrap --nginx 1> /var/log/cerbot.log 2>&1

J'ai le même problème aujourd'hui, la solution de @HinchK fonctionne bien, je n'ai plus qu'à remplacer le

ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cryptography-2.0.2.dist-info /opt/eff.org/certbot/venv/local/lib/ python2.7/dist-packages/cryptography-2.0.2.dist-info

par
ln -s /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cryptography-2.2.2.dist-info /opt/eff.org/certbot/venv/local/lib/ python2.7/dist-packages/cryptography-2.2.2.dist-info

et a fonctionné comme un charme.

J'ai été confronté à ce problème aujourd'hui.
Ma solution de contournement pour certbot 0.26.1 sur Amazon Linux AMI 4.4.30-32.54.amzn1.x86_64 était :

cd /opt/eff.org/certbot/venv/lib64/python2.7
rmdir site-packages (dans mon cas, ce répertoire était vide)
ln -s dist-packages site-packages

Et c'est tout, ça a marché pour moi.

Confirmez que la solution

Ceux-ci ont-ils des problèmes sur Amazon Linux 1 ou 2 ? S'il s'agit d'Amazon Linux 2, vous pouvez et devez utiliser les packages EPEL7 sur certbot-auto . La procédure d'installation de ces packages est décrite sur https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/SSL-on-an-instance.html#letsencrypt.

@smartITNinja @lpkirby
Lorsque j'ai essayé de ln dist-packages site-packages , j'ai obtenu hard link not allowed for directory .

Vous avez vraiment lié des packages dist à des packages de site ?

@saiday - fwiw - Non, j'ai fait un lien symbolique.

@bmw - C'est intéressant. Certains endroits dans les documents AWS indiquent que vous ne devriez pas installer EPEL dans Amazon Linux 2, et certains vous montrent comment le faire.

@bmw Amazon Linux 1

@saiday désolé, c'est un "lien

/opt/eff.org/certbot/venv/lib64/python2.7

drwxr-xr-x 9 root root  4096 Jul 18 14:14 dist-packages
lrwxrwxrwx 1 root root    13 Jul 18 14:26 site-packages -> dist-packages

C'est intéressant. Certains endroits dans les documents AWS indiquent que vous ne devriez pas installer EPEL dans Amazon Linux 2, et certains vous montrent comment le faire.

Hein. Je ne connais malheureusement pas assez Amazon Linux 2 pour fournir une recommandation d'une manière ou d'une autre. Tout ce que je peux dire c'est :

  1. Les packages OS à jour doivent être préférés à certbot-auto .
  2. Au moins pour faire fonctionner Certbot, les packages EPEL7 ont fonctionné pour les utilisateurs d'Amazon Linux 2, y compris nous pendant les tests.

@smartITNinja merci , cela a résolu mon problème dans mon amazon EC2

@smartITNinja qui a fonctionné pour moi sur un Amazon Linux 1 EC2 aujourd'hui.

Bravo

La seule chose qui a fonctionné était le hack de @smartITNinja . Je rencontre ce problème tout le temps. Le script certbot doit être mis à jour pour "attraper" cela et soit le contourner, soit fournir un message d'erreur utile. AWS EC2 est une distribution majeure et Let's Encrypt devrait fonctionner immédiatement avec. PÉRIODE.

Je rencontrais le même problème sur une AMI Amazon Linux.

J'ai fini par utiliser le conteneur docker certbot. A pris environ 90 secondes.

En supposant que docker soit installé et en cours d'exécution :

docker pull certbot/certbot

docker run -it --rm --name certbot \
-v "/etc/letsencrypt:/etc/letsencrypt" \
-v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
certbot/certbot \
certonly --manual --preferred-challenges dns-01 --agree-tos -d "example.com" -d "*.example.com" --server https://acme-v02.api.letsencrypt.org/directory

J'ai eu ce problème sur mon AMI de base que j'utilise. J'ai fait cela pour résoudre le problème. (le lien symbolique n'a pas fonctionné pour moi)

sudo rm -Rf /opt/eff.org
sudo /opt/letsencrypt/letsencrypt-auto --help --debug

Maintenant que la base est fixée, je peux l'utiliser pour n'importe quel site Web comme prévu. Cette méthode est bonne si vous n'avez pas encore de certificat et que vous ne travaillez que sur votre base.

Si vous avez déjà un certificat ou devez le renouveler :
Supprimez d'abord le mauvais paquet :

sudo rm -Rf /opt/eff.org

L'ajout de --debug à la commande que vous exécutez.

Grâce à @gmegidish je suis arrivé à la solution qui a fonctionné pour moi :

  1. unset PYTHON_INSTALL_LAYOUT
  2. sudo rm -rf /opt/eff.org/certbot/
  3. pip install cryptography interface
  4. ./certbot-auto renew -v --debug

/opt/letsencrypt/letsencrypt-auto --help (tester si cela fonctionne)

Mettre à jour:
Je viens de faire une installation de base d'Amazon Linux 2 et le dernier certbot a fonctionné presque immédiatement. La seule chose que je devais installer était python-virtualenv à partir des dépôts AWS yum.

Clôture en faveur de la prise en charge du suivi et des chemins d'installation recommandés au n° 6505 pour Amazon Linux 1 et au n° 6506 pour Amazon Linux 2.

Cela a fait l'affaire : sudo /opt/eff.org/certbot/venv/local/bin/pip install cryptography interface zope

Cela a fait l'affaire : sudo /opt/eff.org/certbot/venv/local/bin/pip install cryptography interface zope

Cela a fait l'affaire pour moi aussi.

ET ... la dernière mise à jour de certbot s'est écrasée avec :

Requesting to rerun ./certbot-auto with root privileges...
Upgrading certbot-auto 0.40.0 to 0.40.1...
Replacing certbot-auto...
Creating virtual environment...
Installing Python packages...
Installation succeeded.
Traceback (most recent call last):
  File "/opt/eff.org/certbot/venv/bin/letsencrypt", line 7, in <module>
    from certbot.main import main
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/certbot/main.py", line 10, in <module>
    import josepy as jose
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/josepy/__init__.py", line 41, in <module>
    from josepy.interfaces import JSONDeSerializable
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/josepy/interfaces.py", line 7, in <module>
    from josepy import errors, util
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/josepy/util.py", line 7, in <module>
    import OpenSSL
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/OpenSSL/__init__.py", line 8, in <module>
    from OpenSSL import crypto, SSL
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/dist-packages/OpenSSL/crypto.py", line 12, in <module>
    from cryptography import x509
ImportError: No module named cryptography

Utilisé ce qui suit pour le réparer:

sudo /opt/eff.org/certbot/venv/local/bin/pip install cryptography interface zope

Et cela m'a permis de travailler à nouveau ... peut-être que cela ne devrait pas être mis à jour automatiquement ?

Et cela m'a permis de travailler à nouveau ... peut-être que cela ne devrait pas être mis à jour automatiquement ?

Si vous souhaitez ce comportement, vous pouvez utiliser le drapeau --no-self-upgrade , cependant, gardez à l'esprit que cela vous exclura de tous les changements pour la sécurité ou ceux qui vous maintiennent compatible avec les serveurs de Let's Encrypt.

N'oubliez pas non plus que lorsque vous exécutez certbot-auto pour la première fois sans indicateurs sur Amazon Linux, il se termine avec le message :

FATAL: Amazon Linux support is very experimental at present...
if you would like to work on improving it, please ensure you have backups
and then run this script again with the --debug flag!

Jusqu'à ce que cela change (qui est suivi par https://github.com/certbot/certbot/issues/6505), je pense que vous devriez continuer à vous attendre à avoir des problèmes comme ceux-ci.

J'ai une solution pour l'instance Ec2 Amazon Linux AMI :

Installez tous les packages dans venv :
/opt/eff.org/certbot/venv/bin/pip2 install cryptography zope interface /opt/eff.org/certbot/venv/bin/pip2 install --upgrade pip
Ensuite, vous devez synchroniser les dossiers lib64/ et lib/ :
rsync -avz /opt/eff.org/certbot/venv/lib64/python2.7/dist-packages/ /opt/eff.org/certbot/venv/lib/python2.7/dist-packages/

test:
/usr/local/bin/certbot-auto certonly --debug --webroot

Travailler pour moi dans deux instances AMI. =)

Pour ce que ça vaut, j'ai décidé d'abandonner le script certbot-auto et de le faire fonctionner sur Amazon Linux avec les étapes suivantes :

pip install -y python36 python36-devel python36-tools augeas-libs libffi-devel
pip-3.6 install certbot certbot-dns-route53

Je sais que ce n'est pas recommandé, mais cela a fonctionné pour moi !

D'ailleurs, sur Amazon Linux 2, c'est dans le gestionnaire de paquets, il suffit de faire

amazon-linux-extras install epel
yum -y install certbot certbot-dns-route53

La solution consiste à activer EPEL , exécutez simplement sudo yum-config-manager --enable epel , ceci est mentionné à la fois dans les documents/instructions certbot et les documents aws voir :

  1. (aws docs) https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/SSL-on-amazon-linux-ami.html -> faites défiler jusqu'à "Pour installer et exécuter Certbot" -> étape 1
  1. (docs certbot) https://certbot.eff.org/lets-encrypt/centosrhel7-other , étape 2 (Activer le référentiel EPEL)

Le script certbot-auto sur mon serveur s'est mis à jour automatiquement (je ne savais pas qu'il le ferait et maintenant je connais le drapeau --no-self-upgrade ) et le problème "ImportError: No module named cryptography" est revenu.

J'ai réussi à trouver une solution qui a fonctionné ici : https://aws.nz/best-practice/letsencrypt-amazon-linux/

Cette page vous a été utile?
0 / 5 - 0 notes