Certbot: ImportError: modul 'pyOpenSSL' tidak memiliki fungsionalitas yang diperlukan

Dibuat pada 17 Apr 2017  ·  35Komentar  ·  Sumber: certbot/certbot

Sistem operasi saya adalah (termasuk versi):

CentOS Linux rilis 7.3.1611

Saya menginstal Certbot dengan (certbot-auto, manajer paket OS, pip, dll):

Manajer pemaket OS

Saya menjalankan perintah ini dan menghasilkan output ini:

pembaruan certbot

Traceback (panggilan terakhir terakhir):
File "/bin/certbot", baris 7, di
dari certbot.main impor utama
File "/usr/lib/python2.7/site-packages/certbot/main.py", baris 17, di
dari klien impor certbot
File "/usr/lib/python2.7/site-packages/certbot/client.py", baris 10, di
dari acme import client sebagai acme_client
File "/usr/lib/python2.7/site-packages/acme/client.py", baris 31, di
request.packages.urllib3.contrib.pyopenssl.inject_into_urllib3() # ketik: abaikan
File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", baris 112, di inject_into_urllib3
_validate_dependencies_met()
File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", baris 147, di _validate_dependencies_met
raise ImportError("modul 'pyOpenSSL' tidak memiliki fungsionalitas yang diperlukan."
ImportError: modul 'pyOpenSSL' tidak memiliki fungsionalitas yang diperlukan. Coba tingkatkan ke v0.14 atau yang lebih baru.

Perilaku Certbot berbeda dari yang saya harapkan karena:

Itu harus berhasil memperbarui alih-alih kesalahan.

Berikut adalah log Certbot yang menunjukkan masalah (jika tersedia):

Log disimpan di /var/log/letsencrypt secara default. Jangan ragu untuk menyunting domain, email, dan alamat IP sesuai keinginan Anda.

Tidak ada entri log. Saya telah menghapus pyopenssl dan menginstalnya kembali.

pip tampilkan pyOpenssl

Nama: pyOpenSSL
Versi: 16.2.0
Ringkasan: Modul pembungkus Python di sekitar perpustakaan OpenSSL
Halaman beranda: https://pyopenssl.readthedocs.io/
Pengarang: Hynek Schlawack
Penulis-email: [email protected]
Lisensi: Lisensi Apache, Versi 2.0
Lokasi: /usr/lib64/python2.7/site-packages
Membutuhkan: enam, kriptografi

Tapi kesalahan masih berlanjut. Ada ide ?

pkging

Komentar yang paling membantu

Teman-teman, jangan mencampur paket yang diinstal yum melalui paket pip . Perbaikan yang tepat melibatkan penghapusan paket pip dan menginstal semuanya dari yum . Saya telah menguraikannya di sini .

Anda tidak memerlukan pyOpenSSL yang lebih baru di CentOS 7 untuk menjalankan certbot! Bukan untuk mengatakan mengandalkan paket ketiga tidak akan membawa Anda ke sesuatu yang baik, pada akhirnya :)

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

Semua 35 komentar

Mungkin ada beberapa versi pyOpenSSL sehingga urllib3 menjadi bingung. Di /usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py, seharusnya ada beberapa baris seperti ini:

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

Bisakah Anda menambahkan beberapa kode debug dan melihat apa hasilnya?

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

Berhati-hatilah karena Python tidak menyukai tab. Selalu sisipkan spasi untuk identifikasi. Juga, Anda perlu root untuk memodifikasi file ini.

Berikut adalah outputnya:

pembaruan certbot



Traceback (panggilan terakhir terakhir):
File "/bin/certbot", baris 7, di
dari certbot.main impor utama
File "/usr/lib/python2.7/site-packages/certbot/main.py", baris 17, di
dari klien impor certbot
File "/usr/lib/python2.7/site-packages/certbot/client.py", baris 10, di
dari acme import client sebagai acme_client
File "/usr/lib/python2.7/site-packages/acme/client.py", baris 31, di
request.packages.urllib3.contrib.pyopenssl.inject_into_urllib3() # ketik: abaikan
File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", baris 112, di inject_into_urllib3
_validate_dependencies_met()
File "/usr/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", baris 149, di _validate_dependencies_met
raise ImportError("modul 'pyOpenSSL' tidak memiliki fungsionalitas yang diperlukan."
ImportError: modul 'pyOpenSSL' tidak memiliki fungsionalitas yang diperlukan. Coba tingkatkan ke v0.14 atau yang lebih baru.

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

Jalur ini terlihat seperti dari paket pyOpenSSL sebelumnya. Bisakah Anda menghapus pyOpenSSL melalui yum dan coba lagi?

Saya mengalami masalah yang sama pada centos7. Menghapus pyOpenSSL.x86_64 0:0.13.1-3.el7 tidak membantu, karena yum install certbot akan menginstal ulang lagi.

Namun saya menemukan solusi untuk RPM yang rusak:

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

Masalah yang sama di sini pada instalasi centos baru.

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

Saya pikir ini lebih merupakan masalah CentOS daripada certbot. Adakah yang bisa melaporkan ke CentOS bahwa pyOpenSSL mereka terlalu tua?

Masalahnya tetap ada di sistem saya bahkan setelah memutakhirkan ke pyOpenSSL 16.something

Masalah yang sama terjadi baru-baru ini pada mesin CentOS 7 saya.
Satu-satunya solusi yang berhasil adalah pip install pyOpenSSL=0.13.1

Dua bulan terakhir, itu gagal.
Dan saya mencobanya lagi sekarang, gagal lagi.

Hasil:

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

Kemudian saya mencoba ini dan berhasil:

_20170502100430

Tautan jawabannya: https://serverfault.com/questions/830284/certbot-for-letsencrypt-missing-pyopenssl-module

Hanya untuk referensi ... umumnya tidak aman untuk memperbarui pyOpenSSL melalui pip di CentOS karena mungkin saja merusak yum seperti itu.

Paket certbot mana yang Anda gunakan? Saya akan sangat menghargai jika Anda dapat menginstal 0.13.0 dari epel-testing, dan selalu memastikan sistem Anda memiliki pembaruan yum penuh.

Anda mungkin perlu menggunakan yum install ulang pyOpenSSL untuk memperbaiki sistem Anda (periksa statusnya dengan rpm -qV pyOpenSSL).

Ada masalah dengan pengatur waktu pembaruan systemd dengan paket itu, itulah sebabnya saya tidak mendorongnya stabil, tetapi hanya melakukan permintaan certbot dan pembaruan certbot manual akan berfungsi.

Rilis 0.14.0 juga sedang dalam proses... dan saya benar-benar baru saja mengujinya di AWS.

Saya ingin tahu - penulis asli menginstalnya melalui manajer paket, jadi di mana kami akan menyematkan versi untuk pip?
Apakah orang-orang masih mengalami masalah ini? Dan jika demikian, metode penginstalan apa yang Anda gunakan?

Anda mungkin ingin mencoba metode yang dijelaskan dalam Dockerfile ini, yang berhasil untuk saya:
https://github.com/identinetics/docker-nginx/blob/master/Dockerfile#L65

Masih mengalami masalah pada centOS 7.3 yang baru diinstal dan diperbarui.
Memperbaiki masalah dengan menginstal pyOpenSSL rpm yang diperbarui (pyOpenSSL-0.14-3.fc222 sepertinya cukup, sementara pyOpenSSL-16.2.0-1.fc25 tidak berfungsi), tetapi bagaimana memastikannya tidak merusak yang lain?!

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

Terima kasih

@tisc0 Saya sangat tertarik pada detail lebih lanjut tentang bagaimana Anda menginstal dan menjalankan ini untuk berakhir dengan masalah itu.

Ketika saya membuat paket centos7 certbot, saya mengujinya di AWS tanpa masalah - tentu saja tidak seperti yang Anda gambarkan atau jelaskan masalah ini.

Menginstal fedora rpm seperti itu langsung di centos7 adalah ide yang buruk - terutama dengan paket inti seperti pyOpenSSL.

Hai Hogarthj,
Maaf kalau kurang detail, agak sibuk hari ini :)
Pendeknya :

  • pemasangan fedora rpm tidak menyelesaikan masalah (hanya certbot --help yang berfungsi, seingat saya)
  • setelah bermain lama dengan paket-paket, dan memeriksanya benar-benar berfungsi di centos 7 baru lainnya (tanpa paket kotak), saya menginstal ulang mereka dan akhirnya mendapatkan kesalahan lain tentang urllib3 (juga meminta untuk menginstal versi yang diperbarui, yang Saya tidak membeli ;]).
  • Saya memutuskan untuk menghapus/menginstal ulang urllib3 dengan yum (bukan dengan rpm -e) dan semua paket dependen; dalam hal ini, beberapa paket umum juga dibutuhkan oleh ipa-client...
  • Saya menginstal ulang (dalam urutan itu) urllib3 dan certbot: berhasil
  • Saya akhirnya menginstal ulang ipa-client dan sekarang berfungsi.

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

================
Kemasan
Menghapus:
python-urllib3
Menghapus
certbot
ipa-klien
python-permintaan
python2-acme
python2-certbot
python2-ipacient
python2-ipalib

Ada ide untuk menjelaskan mengapa menginstal ulang beberapa paket membuatnya berfungsi, dipersilakan :)

@tisc0 terima kasih atas detail tambahannya

Menginstal/menghapus paket secara paksa sering kali dapat menyebabkan masalah - seperti halnya pemutakhiran pip dari pustaka sistem.

Jarang merupakan ide bagus untuk mengambil paket Fedora untuk penggunaan CentOS tanpa melakukan pembangunan kembali paket itu sendiri dari src.rpm

Dengan menginstal ulang paket-paket (daripada melakukan penghapusan dan penginstalan dengan masalah ketergantungan, instal ulang yum dapat menjadi penyelamat) file asli diverifikasi untuk berada di tempatnya.

Saya sangat senang mendengar bahwa instal ulang paket CentOS berhasil untuk Anda :)

Karena @tisc0 tampaknya memiliki pengaturan yang berfungsi sekarang, saya akan menutup masalah ini. Jika ada yang masih mengalami masalah, silakan ajukan masalah baru, karena utas ini semakin ramai.

untuk CentOS7, Lakukan saja "mv /usr/lib64/python2.7/site-packages/OpenSSL /usr/lib64/python2.7/site-packages/pyOpenSSL", dan itu berfungsi seperti pesona bagi saya!!!

Retasan kotor: 1st_place_medal: ;)

Baru saja mengalami masalah yang sama, itu karena pip install -U menimpa modul python yang diinstal dari RPM.

Untuk mengatasi ini saya melakukan hal berikut:

isu

  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.

larutan

[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

isu

  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

larutan

[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   

Pembaruan dari 29 Januari 2018:

Menemukan masalah yang sama lagi, kali ini jauh lebih mudah menggunakan wadah buruh pelabuhan :)

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

@cnritng Ini juga berfungsi untuk saya

Siapa pun yang masih memiliki masalah ini, coba ini:

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

dari @sulliwane . perhatikan bahwa alamat ftp://ftp.muug.ca/mirror/... telah berubah.

Terima kasih @JellyBool

Teman-teman, jangan mencampur paket yang diinstal yum melalui paket pip . Perbaikan yang tepat melibatkan penghapusan paket pip dan menginstal semuanya dari yum . Saya telah menguraikannya di sini .

Anda tidak memerlukan pyOpenSSL yang lebih baru di CentOS 7 untuk menjalankan certbot! Bukan untuk mengatakan mengandalkan paket ketiga tidak akan membawa Anda ke sesuatu yang baik, pada akhirnya :)

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

Langkah-langkah di atas dari @dvershinin berhasil untuk saya

juga membuat semuanya berfungsi dengan apa yang diposting @dvershinin . hanya perlu mengubah baris terakhir dari "yum install ulang python-urllib3" menjadi "yum install python-urllib3"

untuk CentOS7, Lakukan saja "mv /usr/lib64/python2.7/site-packages/OpenSSL /usr/lib64/python2.7/site-packages/pyOpenSSL", dan itu berfungsi seperti pesona bagi saya!!!

Sistem *nix like selalu memiliki masalah yang sama: ketergantungan file rusak.

Teman-teman, jangan mencampur paket yang diinstal yum melalui paket pip . Perbaikan yang tepat melibatkan penghapusan paket pip dan menginstal semuanya dari yum . Saya telah menguraikannya di sini .

Anda tidak memerlukan pyOpenSSL yang lebih baru di CentOS 7 untuk menjalankan certbot! Bukan untuk mengatakan mengandalkan paket ketiga tidak akan membawa Anda ke sesuatu yang baik, pada akhirnya :)

pip uninstall requests
yum reinstall python-requests

pip uninstall six
yum reinstall python-six

pip uninstall urllib3
yum reinstall python-urllib3

Terima kasih! Ini pekerjaan!

Perbaikan @dvershinin tidak berfungsi untuk saya saat ini - setelah mengikuti langkah-langkah yang dijelaskan pada Centos 7 saya menerima kesalahan berikut:

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

@keir-lavelle perbaikan saya hanyalah upaya untuk mengembalikan sistem ke keadaan semula setelah rusak parah dengan menggunakan pip bawah pengguna root (yang begitu banyak tutorial di luar sana membuat orang melakukannya, tanpa memperhitungkan fakta bahwa itu tidak boleh dilakukan dalam sistem CentOS/RHEL!)

Jadi, jika Anda ingin memperbaikinya, Anda dapat mengikuti tautan yang saya berikan yang mencoba memperbaikinya lebih lanjut dengan menghapus semua paket Python (ingat, yum juga berbasis Python), yang juga merupakan perusahaan berbahaya . (karena Anda dapat mematahkan lebih banyak).

  • Jika Anda dapat memulihkan server Anda dari beberapa snapshot/cadangan tempat certbot bekerja, maka Anda akan baik-baik saja
  • Jika tidak, "hapus semua paket Python / instal ulang" sepertinya satu-satunya cara untuk memperbaikinya (tetapi pastikan untuk memperhitungkan konsekuensi dari melakukannya jika, karena alasan tertentu, Anda tidak bisa mendapatkan yum ke status kerja ).

Dan tentu saja perlu diingat lagi: jangan gunakan pip atau python installs di bawah root . Begitulah cara istirahat di tempat pertama. Jika itu tidak terjadi - itu tidak akan pecah.

Terima kasih telah meluangkan waktu untuk menjelaskan, saya hanya menguji hal-hal saat ini sehingga server dapat dibuang jadi bukan masalah besar jika rusak tetapi hargai informasinya

Apakah halaman ini membantu?
0 / 5 - 0 peringkat