Certbot: Amazon Linux: ImportError: Nenhum módulo denominado cryptography.hazmat.bindings.openssl.binding

Criado em 24 fev. 2016  ·  48Comentários  ·  Fonte: certbot/certbot

Ao tentar executar no Amazon Linux: Linux ip #1 SMP Sat Oct 24 01:31:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Git commit hash: 6950dbd0708d3ba16b717ad1097332fc37e33f15

Estou tendo o erro a seguir:

[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

Isso estava funcionando em 8 de fevereiro ... no entanto, ao tentar verificar uma versão antiga para descobrir onde as coisas quebraram, o letsencrypt-auto continua atualizando-se para a versão mais recente!

certbot-auto pyca

Comentários muito úteis

@utdrmac Encontrei o mesmo erro um momento atrás ao implantar um novo certificado - seu comentário inspirou a seguinte correção de hacky, obtida descascando a cebola e vinculando as dependências de volta ao caminho 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

Todos 48 comentários

Qualquer atualização .. Eu também estou enfrentando o mesmo problema ..
Abaixo estão os logs (ambiente - amazon linux)
Comando emitido: ./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

tente isso
sudo ./letsencrypt-auto --help
Tentei o comando acima e funcionou.

Mesmo problema, também resolvido prefixando sudo. Por que essa é a solução?

O mesmo problema ocorreu e foi corrigido usando sudo, obrigado

Também estou tendo esse problema depois de atualizar para o certbot mais recente no Amazon Linux (Linux ip-172-31-10-255 4.9.75-25.55.amzn1.x86_64 # 1 SMP Sex Jan 5 23:50:27 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux)

Parece que o pacote de criptografia está sendo instalado em /opt/eff.org/certbot/venv/local/lib64/python2.7/dist-packages/cryptography/

mas o python não o está encontrando porque não está procurando / operando fora do caminho lib64. Observe que todos os caminhos abaixo são /lib/ e não /lib64/

Removi completamente este env rm -rf /opt/eff.org e reinstalei o cert-bot, mas continuo recebendo o mesmo erro / problema.

` [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 Encontrei o mesmo erro um momento atrás ao implantar um novo certificado - seu comentário inspirou a seguinte correção de hacky, obtida descascando a cebola e vinculando as dependências de volta ao caminho 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 Eu pensei sobre isso também, mas sim, muito hack-y mesmo. Em vez disso, verifique esta solução: https://github.com/certbot/certbot/issues/1680#issuecomment -358728515 Eu verifico que funciona no último beanstalk elástico.

@HinchK Obrigado. Isso (temporariamente) consertou para mim. (AWS)

@HinchK , sua solução foi incrível. Obrigado.

Chiming naquela solução

Quebrou quando fui atualizar meu certificado hoje e o certbot atualizou de 0.19.0 para 0.21.1.

Eu mesma enfrentei o problema pela segunda vez. Parece ser um problema quando o certbot executa atualizações sem permissões suficientes. A atualização está falhando silenciosamente, deixando o software em um estado ruim detectado quando o certbot tenta realmente ser executado. Uma melhor detecção de erros na rotina de instalação / atualização da biblioteca pode ajudar a evitar confusões futuras.

A solução que @utdrmac vinculou acima funcionou para corrigir isso para mim (mas tive que executá-lo como root). Recebi o mesmo erro quando o certbot tentou atualizar para 0.22.0 agora (no AWS EC2).

Acabei de encontrar esse problema novamente em uma região diferente da AWS; e pode confirmar que a instalação do @utdrmac via pip funcionou para mim! https://github.com/certbot/certbot/issues/1680#issuecomment -358728515

Implementando o certbot de pip em minhas instâncias; como minha solução alternativa de link simbólico anterior foi um hack bastante grosseiro que funcionou, mas pode não funcionar no futuro.

Eu tive o mesmo problema. Aqui está o que resolveu para mim:

/opt/eff.org/certbot/venv/local/bin/pip instalar interface de criptografia

depois de tentar de tudo, o hack do @HinchK foi a única coisa que funcionou para mim

Também posso confirmar awls99 - encontrou o mesmo problema nos últimos dias, tentei de tudo, todas as soluções não tiveram efeito sobre o problema.
O @HinchK way corrigiu o problema.

A solução

@HinchK um tiro, uma morte! :-)

@gmegidish é o cara !!!
Obrigado!!

/opt/eff.org/certbot/venv/local/bin/pip instalar interface de criptografia

funcionou para mim!

@alex , alguma ideia do que pode estar acontecendo aqui?

No momento, estamos usando criptografia 2.0.2, pyOpenSSL 16.2.0 e outras marcações em https://github.com/certbot/certbot/blob/master/letsencrypt-auto-source/pieces/dependency-requirements.txt.

Se for sobre o Amazon Linux, acho que é https://github.com/pypa/pip/issues/4464

cc: @reaperhulk

ei,

Eu encontrei uma solução que funcionou para mim por CTRL-F a web com meus olhos.

Neste link, @utdrmac instala o certbot diretamente com o pip.
https://github.com/certbot/certbot/issues/1680#issuecomment -358728515
Eu trabalhei para mim, pelo menos.

E oh, pense em instalar plugins certbot usando pip também para gerenciar a configuração automática de, digamos, nginx (por @bmw ):
https://github.com/certbot/certbot/issues/1736#issuecomment -165189246

Boa sorte !

editar: Também estou instalando certificados no Amazon Linux.

Acertei esse problema novamente, segui os passos simples nos links da postagem de @eregnier , funcionou na primeira tentativa, agora meu crontab fica assim:
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

Estou com o mesmo problema hoje, a solução do @HinchK funciona bem, só tenho que substituir o

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

por
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

e funcionou como um encanto.

Eu enfrentei esse problema hoje.
Minha solução alternativa para o certbot 0.26.1 no Amazon Linux AMI 4.4.30-32.54.amzn1.x86_64 foi:

cd /opt/eff.org/certbot/venv/lib64/python2.7
rmdir site-packages (no meu caso, este diretório estava vazio)
ln -s dist-packages site-packages

E isso é tudo, funcionou para mim.

Confirme se a solução @smartITNinja funcionou para mim também.

Eles estão tendo problemas no Amazon Linux 1 ou 2? Se for o Amazon Linux 2, você pode e deve usar os pacotes EPEL7 acima de certbot-auto . Como instalar esses pacotes está descrito em https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/SSL-on-an-instance.html#letsencrypt.

@smartITNinja @lpkirby
Quando tentei ln dist-packages site-packages , achei hard link not allowed for directory .

Você realmente vinculou dist-packages a pacotes de sites?

@saiday - fwiw - Não, fiz um link simbólico.

@bmw - Isso é interessante. Alguns lugares nos documentos da AWS dizem que você não deve instalar a EPEL no Amazon Linux 2 e alguns mostram como fazer isso.

@bmw Amazon Linux 1

@saiday , desculpe, é um "link físico . O comentário foi corrigido agora, incluindo as etapas corretas. Obrigado!

/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

Isso é interessante. Alguns lugares nos documentos da AWS dizem que você não deve instalar a EPEL no Amazon Linux 2 e alguns mostram como fazer isso.

Huh. Infelizmente, não sei o suficiente sobre o Amazon Linux 2 para fornecer uma recomendação de uma forma ou de outra. Tudo que posso dizer é:

  1. Pacotes de SO atualizados devem ser preferidos em vez de certbot-auto .
  2. Pelo menos para fazer o Certbot funcionar, os pacotes EPEL7 funcionaram para pessoas no Amazon Linux 2, incluindo nós durante os testes.

@smartITNinja thx, isso resolveu meu problema no Amazon EC2

@smartITNinja que funcionou para mim em um Amazon Linux 1 EC2 hoje.

Saúde 👍

A única coisa que funcionou foi o hack do @smartITNinja . Eu me deparo com esse problema o tempo todo. O script certbot precisa ser atualizado para "capturar" isso e contornar isso ou fornecer uma mensagem de erro útil. O AWS EC2 é uma distribuição principal e o Let's Encrypt deve funcionar imediatamente com ele. PERÍODO.

Estava tendo o mesmo problema em um Amazon Linux AMI.

Acabou usando apenas o contêiner docker certbot. Demorou cerca de 90 segundos.

Supondo que você tenha o docker instalado e executando:

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

Tive esse problema na minha base de AMI que uso. Fiz isso para resolver o problema. (link simbólico não funcionou para mim)

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

Agora que a base está consertada, posso usá-la para qualquer site conforme o esperado. Essa maneira é boa se você ainda não tem um certificado e está trabalhando apenas na sua base.

Se você já tem um certificado ou precisa renovar:
Primeiro remova o pacote defeituoso:

sudo rm -Rf /opt/eff.org

O anexo --debug ao comando que você está executando.

Graças a @gmegidish , encontrei a solução que funcionou para mim:

  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 (testando se funciona)

Atualizar:
Acabei de fazer uma instalação básica do Amazon Linux 2 e o certbot mais recente funcionou quase fora da caixa. A única coisa que tive de instalar foi o python-virtualenv do AWS yum repos.

Fechando em favor do rastreamento de suporte e caminhos de instalação recomendados em # 6505 para Amazon Linux 1 e # 6506 para Amazon Linux 2.

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

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

Isso funcionou para mim também.

E ... a última atualização do certbot travou com:

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

Usei o seguinte para corrigi-lo:

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

E isso me fez trabalhar de novo ... talvez não devesse atualizar automaticamente?

E isso me fez trabalhar de novo ... talvez não devesse atualizar automaticamente?

Se você quiser esse comportamento, pode usar o sinalizador --no-self-upgrade , entretanto, lembre-se de que isso o deixará excluído de todas as alterações de segurança ou daquelas que o mantêm compatível com os servidores do Let's Encrypt.

Lembre-se também de que quando você executa o certbot-auto pela primeira vez sem sinalizadores no Amazon Linux, ele sai com a mensagem:

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!

Até que isso mude (que é rastreado por https://github.com/certbot/certbot/issues/6505), acho que você deve continuar a ter problemas como esses.

Tenho uma solução para a instância Ec2 Amazon Linux AMI:

Instale todos os pacotes em venv:
/opt/eff.org/certbot/venv/bin/pip2 install cryptography zope interface /opt/eff.org/certbot/venv/bin/pip2 install --upgrade pip
em seguida, você precisa sincronizar as pastas lib64 / e lib /:
rsync -avz /opt/eff.org/certbot/venv/lib64/python2.7/dist-packages/ /opt/eff.org/certbot/venv/lib/python2.7/dist-packages/

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

Trabalhando para mim em duas instâncias da AMI. =)

Pelo que vale a pena, decidi abandonar o script certbot-auto e colocá-lo funcionando no Amazon Linux com as seguintes etapas:

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

Eu sei que não é recomendado - mas funcionou para mim!

A propósito, no Amazon Linux 2, está no gerenciador de pacotes, tudo o que você precisa fazer é

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

A solução é habilitar o EPEL, simplesmente execute sudo yum-config-manager --enable epel , isso é mencionado nos documentos / instruções do certbot e nos documentos do aws, consulte:

  1. (documentos aws) https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/SSL-on-amazon-linux-ami.html -> role até "Para instalar e executar Certbot" -> etapa 1
  1. (documentos certbot) https://certbot.eff.org/lets-encrypt/centosrhel7-other , etapa 2 (Habilitar repo EPEL)

O script certbot-auto em meu servidor se atualizou automaticamente (não sabia que faria isso e agora sei sobre o sinalizador --no-self-upgrade ) e o problema "ImportError: Nenhum módulo denominado criptografia" voltou.

Consegui encontrar uma solução que funcionou aqui: https://aws.nz/best-practice/letsencrypt-amazon-linux/

Esta página foi útil?
0 / 5 - 0 avaliações