Certbot: ImportError: módulo 'pyOpenSSL' sem funcionalidade necessária. Tente atualizar para v0.14 ou mais recente.

Criado em 5 fev. 2018  ·  17Comentários  ·  Fonte: certbot/certbot

Meu sistema operacional é (incluir versão):

CentOS 7.4.1708 (64 bits)

Eu instalei o Certbot com (certbot-auto, gerenciador de pacotes do SO, pip, etc):

centos 7 yum

Eu executei este comando e ele produziu esta saída:

sudo certbot --authenticator standalone --installer nginx --pre-hook "nginx -s stop" --post-hook "nginx"

saída:
Traceback (most recent call last): File "/bin/certbot", line 9, in <module> load_entry_point('certbot==0.20.0', 'console_scripts', 'certbot')() File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 572, i n load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2755, in load_entry_point return ep.load() File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2408, in load return self.resolve() File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2414, in resolve module = __import__(self.module_name, fromlist=['__name__'], level=0) File "/usr/lib/python2.7/site-packages/certbot/main.py", line 19, in <module> from certbot import client File "/usr/lib/python2.7/site-packages/certbot/client.py", line 11, in <module > from acme import client as acme_client File "/usr/lib/python2.7/site-packages/acme/client.py", line 32, in <module> requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3() # type: i gnore File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 112 , in inject_into_urllib3 _validate_dependencies_met() 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.

O comportamento do Certbot foi diferente do que eu esperava porque:

Eu o exclui para me dar o certificado, mas deu esse erro. já tentei atualizar o pyOpenSSL, mas não funcionou

Aqui está um log do Certbot mostrando o problema (se disponível):

Os logs são armazenados em /var/log/letsencrypt por padrão. Sinta-se à vontade para redigir domínios, e-mail e endereços IP como achar melhor.

A pasta não existe

Aqui está o bloco de servidor nginx relevante ou o virtualhost Apache para o domínio que estou configurando:

back-end upstream {
# o servidor netdata
servidor 127.0.0.1:19999;
manter vivo 64;
}

servidor {
# nginx ouve isso
ouça 80;

# the virtual host name of this
server_name netdata.mydomain.fi;

location / {
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_pass_request_headers on;
    proxy_set_header Connection "keep-alive";
    proxy_store off;
}

}

unplanned

Comentários muito úteis

tente pip install --upgrade --force-reinstall 'requests==2.6.0'

Todos 17 comentários

centos-release-7-4.1708.el7.centos.x86_64

ImportError: módulo 'pyOpenSSL' sem funcionalidade necessária. Tente atualizar para v0.14 ou mais recente.

atualizar pyOpenSSL 0.13.1 de pyOpenSSL 17.5.0

quando rebaixar:

sudo pip install pyOpenSSL==0.15.1

mesmo erro

ImportError: módulo 'pyOpenSSL' sem funcionalidade necessária. Tente atualizar para v0.14 ou mais recente.

tente pip install --upgrade --force-reinstall 'requests==2.6.0'

Não misture pacotes yum instalados com pip . A correção adequada envolve a remoção de pacotes pip e instalar tudo de yum . Eu delineei aqui .

Você não precisa do pyOpenSSL mais recente no CentOS 7 para executar o certbot!

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

Este bug ainda persiste no RHEL 7

Traceback (most recent call last):
  File "/bin/certbot", line 9, in <module>
    load_entry_point('certbot==0.22.2', 'console_scripts', 'certbot')()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 558, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2682, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2355, in load
    return self.resolve()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2361, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python2.7/site-packages/certbot/main.py", line 20, in <module>
    from certbot import client
  File "/usr/lib/python2.7/site-packages/certbot/client.py", line 13, in <module>
    from acme import client as acme_client
  File "/usr/lib/python2.7/site-packages/acme/client.py", line 33, in <module>
    requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()  # type: ignore
  File "/usr/lib/python2.7/site-packages/urllib3/contrib/pyopenssl.py", line 112, in inject_into_urllib3
    _validate_dependencies_met()
  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.

Tão agravante. Estou começando a odiar Centos.

Tentei atualizar o pyOpenSSL no CentOS, obtive o seguinte erro:

sudo pip install pyOpenSSL==0.15.1
Coletando pyOpenSSL==0.15.1
Baixando https://files.pythonhosted.org/packages/37/2f/840f2656e4bcf257cb814825bb751a9197ca6f39f1fa036ab111920ac7ef/pyOpenSSL-0.15.1-py2.py3-none-any.whl (102kB)
100% |████████████████████████████████| 112 KB 1,9 MB/s
Requisito já satisfeito: seis>=1.5.2 em /usr/lib/python2.7/site-packages (de pyOpenSSL==0.15.1) (1.9.0)
Requisito já satisfeito: criptografia>=0.7 em /usr/lib64/python2.7/site-packages (de pyOpenSSL==0.15.1) (2.3.1)
Requisito já satisfeito: idna>=2.1 em /usr/lib/python2.7/site-packages (da criptografia>=0.7->pyOpenSSL==0.15.1) (2.7)
Requisito já satisfeito: enum34; python_version < "3" em /usr/lib/python2.7/site-packages (da criptografia>=0.7->pyOpenSSL==0.15.1) (1.0.4)
Requisito já satisfeito: cffi!=1.11.3,>=1.7 in /usr/lib64/python2.7/site-packages (da criptografia>=0.7->pyOpenSSL==0.15.1) (1.11.5)
Requisito já satisfeito: asn1crypto>=0.21.0 em /usr/lib/python2.7/site-packages (da criptografia>=0.7->pyOpenSSL==0.15.1) (0.24.0)
Requisito já satisfeito: ipaddress; python_version < "3" em /usr/lib/python2.7/site-packages (da criptografia>=0.7->pyOpenSSL==0.15.1) (1.0.16)
Requisito já satisfeito: pycparser em /usr/lib/python2.7/site-packages (de cffi!=1.11.3,>=1.7->cryptography>=0.7->pyOpenSSL==0.15.1) (2.14)
Instalando pacotes coletados: pyOpenSSL
Instalação existente encontrada: pyOpenSSL 0.13.1
Não é possível desinstalar 'pyOpenSSL'. É um projeto instalado do distutils e, portanto, não podemos determinar com precisão quais arquivos pertencem a ele, o que levaria a apenas uma desinstalação parcial.

Um pouco de contexto: o pacote dist para pyOpenSSL está em 0.13.1. para desinstalá-lo para atualizá-lo através do pip - Yum me faz desinstalar o certbot. Considerando que o certbot foi toda a razão pela qual eu preciso atualizar o pyOpenSSL - meio que nos coloca em um catch 22.

yum info pyOpenSSL
Plugins carregados: fastmirror, langpacks
Carregando velocidades de espelho do hostfile em cache

  • base: repos.dfw.quadranet.com
  • epel: mirror.nodesdirect.com
  • extras: reflector.westga.edu
  • atualizações: repo1.dal.innoscale.net
    Pacotes Instalados
    Nome: pyOpenSSL
    Arco: x86_64
    Versão: 0.13.1
    Lançamento: 3.el7
    Tamanho: 628k
    Repositório: instalado
    Do repositório: base
    Resumo: Módulo wrapper Python em torno da biblioteca OpenSSL
    URL: http://pyopenssl.sourceforge.net/
    Licença: ASL 2.0
    Descrição : Wrapper de alto nível em torno de um subconjunto da biblioteca OpenSSL, inclui entre outros
    : * Objetos SSL.Connection, envolvendo os métodos do portátil do Python
    : tomadas
    : * Callbacks escritos em Python
    : * Extenso mecanismo de tratamento de erros, espelhando os códigos de erro do OpenSSL

Tanto para a depuração quanto para o inferno, desinstalei o dist pyOpenSSL (e, portanto, o certbot), fiz uma instalação pip do pyOpenSSL e reinstalei o certbot. Yum substituiu pyOpenSSL 0.15.1 com 0.13.1.... e mesmo resultado quando tento renovar com certbot.

Tentei então sudo pip install --upgrade pyopenssl - e a mesma mensagem de erro sobre a versão instalada do distutils.

Nenhuma solução alternativa hoje - acho que meus certificados vão expirar então

acme.sh funciona, eu desisti do certbot ;)

Pessoal, realmente encontrei uma correção para isso. Não posso receber crédito por fazer outra coisa além de tropeçar no artigo: https://medium.com/@getpagespeed/fix -importerror-pyopenssl-module-missing-required-functionality-e1c514797204

Todos os créditos a Danila Vershinin por encontrar a solução!

Só posso acrescentar que, se você tiver o certbot e o aws cli instalados, é muito provável que tenha esse problema.
da minha pesquisa rápida, parece que a instalação de pacotes do sistema como sugerido break aws cli. consertar aws cli quebra certbot e etc, então não é realmente divertido :)

Pessoal, realmente encontrei uma correção para isso. Não posso receber crédito por fazer outra coisa além de tropeçar no artigo: https://medium.com/@getpagespeed/fix -importerror-pyopenssl-module-missing-required-functionality-e1c514797204

Todos os créditos a Danila Vershinin por encontrar a solução!

A correção não funciona para mim - nenhum pacote pip instalado e todos os listados yum relatam como já instalados e atualizados.

Sobre ter aws cli e certbot no mesmo sistema.

Tudo se resume a uma versão conflitante do urllib3.
awscli-1.16.81 requer urllib3-1.24.1 e python2-certbot-0.27.1-1.el7.noarch.rpm funciona com urllib3-1.10.2 .
A versão mais recente dá o erro mencionado.

Não consigo fazê-los trabalhar juntos, mesmo instalando awscli com --user dá os mesmos problemas, já que o urllib mais recente é colocado em /root/.local/lib e certbot vai olhando aqui também...

Não consigo fazê-los trabalhar juntos, mesmo instalando o awscli com --user dá os mesmos problemas, pois o urllib mais recente é colocado em /root/.local/lib e o certbot vai procurar aqui também ...

Tive o mesmo problema com versões conflitantes do urllib3 depois de instalar o aws cli. Eventualmente, depois de corrigir o certbot, instalei o aws cli usando virtualenv.
https://docs.aws.amazon.com/cli/latest/userguide/install-virtualenv.html
Agora, certbot e aws cli estão bem.

Também instalei o awscli usando o instalador empacotado que eles fornecem, para que seja autocontido.

https://docs.aws.amazon.com/cli/latest/userguide/install-bundle.html

Outra maneira de contornar o conflito entre awscli e certbot é instalar o python36 e executar o awscli usando-o.

O pacote certbot pode não instalar seus módulos python em seu próprio ambiente ou ser menos rigoroso quando se trata de requisitos de versão?

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