ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate hatası, Python'un sunucu sertifikasını güvenilir bir kök CA'ya bağlayamadığını söyler. Doğrulamayı kapatmak kolaydır ama güvenliği ortadan kaldırır; asıl nedeni bulmak gerekir.
Sık nedenler
- Python'un kendi CA paketi eski veya hiç kurulmamış (python.org macOS kurulumlarında sık görülür).
- Sunucu ara sertifikayı göndermiyor.
- Kurumsal güvenlik duvarı HTTPS trafiğini yeniden imzalıyor ve kökü Python tarafından tanınmıyor.
- Sistem saati yanlış olduğu için sertifika geçerlilik aralığı dışında kalıyor.
- Sertifika ile ana bilgisayar adı uyuşmuyor (bu durumda ileti "Hostname mismatch" olur).
Çözümler
- macOS: Python klasöründeki
Install Certificates.commandbetiğini çalıştırın. - CA paketini güncelleyin:
pip install --upgrade certifi - Belirli bir CA dosyası kullanın (kurumsal kök için):
import ssl, urllib.request ctx = ssl.create_default_context(cafile="/yol/kurum-kok.pem") urllib.request.urlopen("https://ornek.com", context=ctx) - Ortam değişkeniyle tüm süreçte geçerli kılın:
SSL_CERT_FILE=/yol/kurum-kok.pem. - Sunucu tarafını kontrol edin; ara sertifika eksikse düzeltilmesi kalıcı çözümdür.
Doğrulama ve uyarı
Çözümden sonra python -c "import ssl; print(ssl.get_default_verify_paths())" ile Python'un hangi CA konumlarına baktığını görebilirsiniz. Testte bile ssl._create_unverified_context() alışkanlığını üretim koduna taşımayın. Sunucudaki zinciri görmek için SSL denetleme aracı, yeni sertifika için SSL sertifikaları sayfası yardımcı olur.
Ek notlar
- Windows'ta bazı kütüphaneler sistem sertifika deposunu, bazıları ise certifi paketini kullanır; aynı makinede iki araç farklı sonuç verebilir.
- Sanal ortamlarda (venv) certifi güncellemesi yalnızca o ortamı etkiler.
- Kurumsal proxy kökünü Python'a tanıtmak yerine işletim sistemi deposuna eklemek ve sistem deposunu kullanan bir kütüphane seçmek de bir seçenektir.
Sorun devam ederse hangi sertifikanın sunulduğunu openssl s_client ile görüp bir ara cihazın müdahalesi olup olmadığına bakın. Sunulan sertifikanın vericisi beklediğiniz CA değilse, trafiği yeniden imzalayan bir cihaz vardır.
Özet: hatanın arkasında çoğunlukla eksik CA paketi ya da eksik ara sertifika vardır; ikisi de doğrulamayı kapatmadan giderilebilir.