SSL Sertifikası

Python SSL: CERTIFICATE_VERIFY_FAILED

Python'da CERTIFICATE_VERIFY_FAILED hatası: macOS, Windows ve kurumsal ağlarda neden çıkar, verify=False kullanmadan nasıl çözülür.

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

  1. macOS: Python klasöründeki Install Certificates.command betiğini çalıştırın.
  2. CA paketini güncelleyin:
    pip install --upgrade certifi
  3. 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)
  4. Ortam değişkeniyle tüm süreçte geçerli kılın: SSL_CERT_FILE=/yol/kurum-kok.pem.
  5. 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.

Bu makale faydalı oldu mu?

Makale Ara

Sunucu SSL Hataları

Yardıma mı İhtiyacınız Var?

Aradığınızı bulamadıysanız destek ekibimiz size yardımcı olabilir.

Destek Talebi Aç