Certbot: ImportError: al módulo 'pyOpenSSL' le falta la funcionalidad requerida

Creado en 17 abr. 2017  ·  35Comentarios  ·  Fuente: certbot/certbot

Mi sistema operativo es (incluye versión):

Versión 7.3.1611 de CentOS Linux

Instalé Certbot con (certbot-auto, administrador de paquetes del sistema operativo, pip, etc.):

Administrador de paquetes de SO

Ejecuté este comando y produjo este resultado:

certbot renovar

Rastreo (llamadas recientes más última):
Archivo "/ bin / certbot", línea 7, en
desde certbot.main import main
Archivo "/usr/lib/python2.7/site-packages/certbot/main.py", línea 17, en
desde el cliente de importación certbot
Archivo "/usr/lib/python2.7/site-packages/certbot/client.py", línea 10, en
desde el cliente de importación de acme como acme_client
Archivo "/usr/lib/python2.7/site-packages/acme/client.py", línea 31, en
request.packages.urllib3.contrib.pyopenssl.inject_into_urllib3 () # tipo: ignorar
Archivo "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", línea 112, en inject_into_urllib3
_validate_dependencies_met ()
Archivo "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", línea 147, en _validate_dependencies_met
raise ImportError ("El módulo 'pyOpenSSL' falta la funcionalidad requerida."
ImportError: al módulo 'pyOpenSSL' le falta la funcionalidad requerida. Intente actualizar a la versión 0.14 o más reciente.

El comportamiento de Certbot difirió de lo que esperaba porque:

Debería renovarse con éxito en lugar de errores.

Aquí hay un registro de Certbot que muestra el problema (si está disponible):

Los registros se almacenan en /var/log/letsencrypt de forma predeterminada. Siéntase libre de redactar dominios, correo electrónico y direcciones IP como mejor le parezca.

No hay entradas de registro. He eliminado pyopenssl y lo he vuelto a instalar.

pip show pyOpenssl

Nombre: pyOpenSSL
Versión: 16.2.0
Resumen: módulo contenedor de Python alrededor de la biblioteca OpenSSL
Página de inicio: https://pyopenssl.readthedocs.io/
Autor: Hynek Schlawack
Autor-correo electrónico: [email protected]
Licencia: Licencia Apache, Versión 2.0
Ubicación: /usr/lib64/python2.7/site-packages
Requiere: seis, criptografía

Pero el error aún persiste. Alguna idea ?

pkging

Comentario más útil

Chicos, no mezclen yum paquetes instalados a través de pip one. La solución adecuada implica eliminar los paquetes pip e instalar todo desde yum . Lo he resumido aquí .

¡No necesita pyOpenSSL más reciente en CentOS 7 para ejecutar certbot! Por no decir que depender de terceros paquetes no lo llevará a nada bueno, eventualmente :)

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

Todos 35 comentarios

Tal vez haya varias versiones de pyOpenSSL para que urllib3 se confunda. En /usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py, debería haber algunas líneas como esta:

    # 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.")

¿Podría agregar algunos códigos de depuración y ver cuál es el resultado?

    # 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.")

Tenga en cuenta que a Python no le gustan las pestañas. Inserte siempre espacios para la identificación. Además, necesita root para modificar este archivo.

Aquí está el resultado:

certbot renovar



Rastreo (llamadas recientes más última):
Archivo "/ bin / certbot", línea 7, en
desde certbot.main import main
Archivo "/usr/lib/python2.7/site-packages/certbot/main.py", línea 17, en
desde el cliente de importación certbot
Archivo "/usr/lib/python2.7/site-packages/certbot/client.py", línea 10, en
desde el cliente de importación de acme como acme_client
Archivo "/usr/lib/python2.7/site-packages/acme/client.py", línea 31, en
request.packages.urllib3.contrib.pyopenssl.inject_into_urllib3 () # tipo: ignorar
Archivo "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", línea 112, en inject_into_urllib3
_validate_dependencies_met ()
Archivo "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", línea 149, en _validate_dependencies_met
raise ImportError ("El módulo 'pyOpenSSL' falta la funcionalidad requerida."
ImportError: al módulo 'pyOpenSSL' le falta la funcionalidad requerida. Intente actualizar a la versión 0.14 o más reciente.

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

Esta ruta se parece a la de un paquete pyOpenSSL anterior. ¿Podría eliminar pyOpenSSL a través de yum e intentarlo de nuevo?

Tengo el mismo problema en centos7. Eliminar pyOpenSSL.x86_64 0: 0.13.1-3.el7 no ayuda, porque yum install certbot lo reinstalará nuevamente.

Sin embargo, encontré una solución para las RPM rotas:

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

El mismo problema aquí en una instalación nueva de centos.

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

Creo que esto es más un problema de CentOS que de un certbot. ¿Alguien puede informar a CentOS que su pyOpenSSL es demasiado antiguo?

El problema persistió en mi sistema incluso después de una actualización a pyOpenSSL 16.

El mismo problema ocurrió recientemente en mi máquina CentOS 7.
La única solución que funciona es pip install pyOpenSSL=0.13.1

Los últimos dos meses fracasó.
Y lo intenté de nuevo hace un momento, falló de nuevo.

La salida:

>> 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.

Entonces pruebo esto y funciona:

_20170502100430

El enlace de la respuesta: https://serverfault.com/questions/830284/certbot-for-letsencrypt-missing-pyopenssl-module

Solo como referencia ... generalmente no es seguro actualizar pyOpenSSL a través de pip en CentOS, ya que es posible romper yum de esa manera.

¿Qué paquete de certbot estás usando? Le agradecería que pudiera instalar 0.13.0 desde epel-testing, y siempre asegurarse de que su sistema tenga una actualización completa de yum.

Es posible que deba usar yum reinstall pyOpenSSL para reparar su sistema (verifique el estado con rpm -qV pyOpenSSL).

Hay un problema con el temporizador de renovación de systemd con ese paquete, por lo que no lo he puesto estable, pero solo hacer solicitudes de certbot y una renovación manual de certbot funcionará.

La versión 0.14.0 también está en camino ... y literalmente lo acabo de probar en AWS.

Tengo curiosidad: el autor original lo instaló a través de un administrador de paquetes, entonces, ¿dónde fijaríamos una versión para pip?
¿La gente todavía tiene este problema? Y si es así, ¿qué método de instalación estás usando?

Es posible que desee probar el método descrito en este Dockerfile, que funcionó para mí:
https://github.com/identinetics/docker-nginx/blob/master/Dockerfile#L65

Todavía tengo el problema en centOS 7.3 recién instalado y actualizado.
Se solucionó el problema instalando pyOpenSSL rpm actualizado (pyOpenSSL-0.14-3.fc222 parecía suficiente, mientras que pyOpenSSL-16.2.0-1.fc25 no funcionó), pero ¿cómo asegurarse de que no está rompiendo nada más?

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

Gracias

@ tisc0 Estoy muy interesado en más detalles sobre exactamente cómo instaló y ejecutó esto para terminar con ese problema.

Cuando construí los paquetes de centos7 certbot, los probé en AWS sin problemas, ciertamente no lo que ha descrito o describe este problema.

Es una idea terrible instalar un rpm de fedora como ese directamente en centos7, especialmente con un paquete central como pyOpenSSL.

Hola Hogarthj,
Perdón por la falta de detalles, un poco ocupado estos días :)
En breve :

  • la instalación de fedora rpm no resolvió el problema (solo el certbot --help estaba funcionando, según recuerdo)
  • después de jugar mucho tiempo con los paquetes, y comprobar que en realidad funcionaba en otro centos 7 nuevo (sin los paquetes de la caja), los reinstalé y finalmente obtuve otro error sobre urllib3 (también pidiendo instalar una versión actualizada, que No compré;]).
  • Decidí eliminar / reinstalar urllib3 con yum (en lugar de con rpm -e) y todos los paquetes dependientes; en este caso, ipa-client también necesita algunos paquetes comunes ...
  • Reinstalé (en ese orden) urllib3 y certbot: funcionó
  • Finalmente reinstalé ipa-client y ahora está funcionando.

[ root @ c7-dse ~] # echo N | yum eliminar python-urllib3 | awk '{imprimir $ 1}'
(...)
Dependencias

==============
Paquete
Eliminando:
python-urllib3
Eliminando
certbot
ipa-cliente
solicitudes de python
python2-acme
python2-certbot
python2-ipaclient
python2-ipalib

Cualquier idea que explique por qué la reinstalación de algunos paquetes lo hizo funcionar es bienvenida :)

@ tisc0 gracias por el detalle adicional

Forzar la instalación / eliminación de paquetes a menudo puede causar problemas, al igual que las actualizaciones de las bibliotecas del sistema.

Rara vez es una buena idea simplemente tomar un paquete de Fedora para el uso de CentOS sin llevar a cabo una reconstrucción del paquete en sí desde src.rpm

Al reinstalar los paquetes (en lugar de quitarlos e instalarlos con problemas de dependencia, yum reinstall puede ser un salvavidas), se verifica que los archivos originales estén en su lugar.

Me alegra mucho saber que reinstalar los paquetes de CentOS lo hace funcionar para usted :)

Dado que @ tisc0 parece tener una configuración funcional, ahora voy a cerrar este problema. Si alguien todavía tiene problemas, presente un nuevo problema, ya que este hilo se está llenando de gente.

para CentOS7, simplemente haz "mv /usr/lib64/python2.7/site-packages/OpenSSL /usr/lib64/python2.7/site-packages/pyOpenSSL", ¡y eso funciona como un encanto para mí!

Hack sucio: 1st_place_medal:;)

Acabo de tener el mismo problema, eso se debe a que pip install -U sobrescribió los módulos de Python instalados desde el RPM.

Para solucionar esto hice lo siguiente:

asunto

  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.

solución

[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

asunto

  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

solución

[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   

Actualización del 29 de enero de 2018:

Me encontré con el mismo problema nuevamente, esta vez fue mucho más fácil usar el contenedor de la ventana acoplable :)

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

@cnritng También me funciona

Cualquiera que todavía tenga este problema, intente esto:

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

de @sulliwane . observe que la dirección ftp://ftp.muug.ca/mirror/... ha cambiado.

Gracias @JellyBool

Chicos, no mezclen yum paquetes instalados a través de pip one. La solución adecuada implica eliminar los paquetes pip e instalar todo desde yum . Lo he resumido aquí .

¡No necesita pyOpenSSL más reciente en CentOS 7 para ejecutar certbot! Por no decir que depender de terceros paquetes no lo llevará a nada bueno, eventualmente :)

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

Los pasos anteriores de @dvershinin me

También conseguí que las cosas funcionaran con lo que publicó @dvershinin . solo tuve que cambiar la última línea de "yum reinstalar python-urllib3" a "yum install python-urllib3"

para CentOS7, simplemente haz "mv /usr/lib64/python2.7/site-packages/OpenSSL /usr/lib64/python2.7/site-packages/pyOpenSSL", ¡y eso funciona como un encanto para mí!

El sistema similar a * nix siempre tiene problemas similares: dependencia de archivos rota.

Chicos, no mezclen yum paquetes instalados a través de pip one. La solución adecuada implica eliminar los paquetes pip e instalar todo desde yum . Lo he resumido aquí .

¡No necesita pyOpenSSL más reciente en CentOS 7 para ejecutar certbot! Por no decir que depender de terceros paquetes no lo llevará a nada bueno, eventualmente :)

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

¡Gracias! ¡Es trabajo!

La corrección de

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

@ keir-lavelle mi solución es solo un intento de restaurar un sistema al estado original después de que se dañó severamente al usar pip bajo root usuario (que tantos tutoriales hacen que la gente haga, ¡sin tener en cuenta el hecho de que nunca debería hacerse en sistemas CentOS / RHEL!)

Entonces, si se siente aventurero para solucionarlo, puede seguir el enlace que proporcioné, que intenta solucionarlo aún más eliminando todos los paquetes de Python (tenga en cuenta, yum está basado en Python), que es una empresa aún más peligrosa. . (porque puedes romper más).

  • Si puede restaurar su servidor desde alguna instantánea / copia de seguridad donde funcionó certbot , entonces debería estar bien
  • De lo contrario, "eliminar todos los paquetes de Python / reinstalar" parece ser la única forma de solucionarlo (pero asegúrese de tener en cuenta las consecuencias de hacerlo si, por alguna razón, no puede obtener yum en un estado de funcionamiento ).

Y, por supuesto, es útil recordar nuevamente: no use pip o python instalaciones en root . Así es como se rompe en primer lugar. Si no sucediera, no se rompería.

Gracias por tomarse el tiempo para explicar, solo estoy probando cosas en este momento para que el servidor sea desechable, por lo que no es gran cosa si se rompe, pero agradezco la información.

¿Fue útil esta página
0 / 5 - 0 calificaciones