Jawaban cepat
Apa arti SSL: CERTIFICATE_VERIFY_FAILED dengan proxy?
CERTIFICATE_VERIFY_FAILED berarti klien Anda tidak dapat memvalidasi sertifikat TLS situs web. Melalui proxy CONNECT seperti gateway CrawlRelay, TLS berjalan secara end to end, jadi proxy tidak menyebabkannya. Lihat di sisi Anda: bundle CA yang usang, antivirus atau firewall kantor yang memeriksa HTTPS, atau jam sistem yang salah. Jangan pernah memperbaikinya dengan verify=False di produksi.
SSL: CERTIFICATE_VERIFY_FAILED sekilas
| Kesalahan | SSL: CERTIFICATE_VERIFY_FAILED |
|---|---|
| Tipe | Error sertifikat TLS di klien |
| Dikirim oleh | Perpustakaan TLS Anda, ketika tidak dapat memvalidasi sertifikat situs web |
| Didefinisikan dalam | X.509 path validation: RFC 5280; TLS 1.3: RFC 8446 |
| Mencoba lagi? | Tidak. Perbaiki trust store atau jaringan |
| Periksa pertama | Uji URL yang sama tanpa proxy di mesin yang sama |
Apa arti SSL: CERTIFICATE_VERIFY_FAILED?
Selama handshake TLS, situs web mengirim rantai sertifikat. Klien Anda memeriksanya terhadap daftar otoritas tepercaya, trust store, serta memeriksa nama dan tanggal. Jika salah satu pemeriksaan gagal, proses dihentikan.
Dengan terowongan CONNECT, proxy meneruskan handshake tanpa disentuh, jadi sertifikat yang Anda lihat adalah milik situs web. Sesuatu yang menyisipkan sertifikat sendiri, seperti perangkat lunak inspeksi, atau trust store yang sudah usang di mesin Anda, biasanya penyebabnya.
Seperti apa CERTIFICATE_VERIFY_FAILED dalam Python, curl, Node.js, dan browser?
Kegagalan yang sama dicetak berbeda di setiap alat. Ini adalah pesan yang perlu dicari di log Anda:
- Python:
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate - Node.js:
UNABLE_TO_GET_ISSUER_CERT_LOCALLYatauSELF_SIGNED_CERT_IN_CHAIN - curl:
curl: (60) SSL certificate problem: unable to get local issuer certificate - Browser:
NET::ERR_CERT_AUTHORITY_INVALID
Apa penyebab CERTIFICATE_VERIFY_FAILED?
Kemungkinan besar pertama:
- Bundle CA yang usang, misalnya paket
certifilama di Python. - Inspeksi HTTPS oleh antivirus, firewall perusahaan, atau proxy debugging, yang menghadirkan sertifikat sendiri.
- Jam sistem yang salah yang membuat sertifikat valid tampak kedaluwarsa atau belum berlaku.
- Situs web dengan rantai yang rusak, kekurangan sertifikat intermediate.
- Gambar container tanpa paket sertifikat CA sistem.
Bagaimana cara mendiagnosis CERTIFICATE_VERIFY_FAILED langkah demi langkah?
- Jalankan permintaan yang sama tanpa proxy. Jika juga gagal, proxy tidak terlibat.
- Cetak penerbit sertifikat dengan
openssl s_clientatau curl-v: penerbit dengan nama antivirus atau firewall Anda menunjukkan adanya intersepsi. - Periksa tanggal dan waktu sistem.
- Perbarui bundle CA dan uji lagi.
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL
# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URLBagaimana cara memperbaiki CERTIFICATE_VERIFY_FAILED?
- Perbarui
certifi(pip install -U certifi) atau paket CA sistem Anda. - Tambahkan sertifikat inspeksi perusahaan ke trust store jika jaringan Anda membutuhkan inspeksi, atau jalankan scraper di luar jaringan tersebut.
- Perbaiki jam dengan sinkronisasi waktu jaringan.
- Pasang sertifikat CA di gambar container slim, misalnya paket
ca-certificates. - Jangan nonaktifkan verifikasi di kode yang mengirim kredensial atau mengumpulkan data yang Anda andalkan.
Haruskah saya mencoba lagi setelah CERTIFICATE_VERIFY_FAILED?
Jangan coba ulang: trust store yang sama akan gagal dengan cara yang sama. Perbaiki trust store, jam, atau jalur jaringan, lalu jalankan ulang.
Bagaimana SSL: CERTIFICATE_VERIFY_FAILED berlaku untuk CrawlRelay?
Port HTTP CrawlRelay menuntun HTTPS dengan CONNECT, jadi sertifikat yang diperiksa klien adalah yang dikirim situs web. Jika error muncul hanya melalui gateway dan tidak pernah tanpa itu, hubungi dukungan dengan hostname target dan error lengkap supaya kami dapat memeriksa sisi keluaran.
Gateway: gw.crawlrelay.com, port 7777 (HTTP, HTTPS melalui CONNECT) dan port 7778 (SOCKS5). Format username: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Terkait: SSL: WRONG_VERSION_NUMBER · Koneksi direset · Panduan Python.
SSL: CERTIFICATE_VERIFY_FAILED: pertanyaan yang sering ditanyakan pengembang
Apakah proxy dapat menyebabkan kesalahan sertifikat SSL?
Proxy intercepting dapat menyebabkan, karena menampilkan sertifikat sendiri. Proxy terowongan CONNECT tidak dapat, karena hanya meneruskan byte terenkripsi dan tidak pernah melihat isi handshake. Jalankan permintaan yang sama tanpa proxy: jika error tetap ada, penyebabnya ada di mesin atau jaringan Anda.
Apakah verify=False aman untuk scraping?
Tidak sebagai perbaikan. Itu menyembunyikan intersepsi dan rantai rusak, dan penyerang di jalur dapat membaca atau mengubah lalu lintas Anda, termasuk token dan cookie. Gunakan hanya untuk uji lokal cepat, dan jangan pernah di pekerjaan yang berjalan tanpa pengawasan atau mengirim kredensial.
Mengapa terjadi kegagalan di Docker tapi berhasil di laptop saya?
Gambar container slim sering dikirim tanpa sertifikat CA, sehingga sertifikat tidak dapat divalidasi. Pasang paket CA sistem di gambar, atau andalkan bundle certifi di Python. Juga periksa bahwa jam container benar.
Kesalahan proxy lain dalam referensi ini
Kode status HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Kesalahan browser dan klien
Error koneksi dan TLS
Proxy residensial dengan dokumentasi yang membahas kasus kegagalan
Proxy residensial CrawlRelay dari US$0,50/GB, lalu lintas yang tidak pernah kedaluwarsa.