SSL Sertifikası

Python Requests SSL Error

requests kütüphanesinde SSLError ve 'Max retries exceeded' hatalarını çözün: verify, REQUESTS_CA_BUNDLE, certifi ve TLS sürümü ayarları.

requests.exceptions.SSLError: HTTPSConnectionPool(host='ornek.com', port=443): Max retries exceeded ... (Caused by SSLError(...)) ifadesi, tekrar deneme mesajıyla yanıltıcı olabilir; asıl neden parantez içindeki SSL ayrıntısındadır.

Ayrıntıya göre neden

  • CERTIFICATE_VERIFY_FAILED: CA paketi (certifi) eski ya da zincir eksik.
  • hostname doesn't match: URL'deki ad sertifikada yok.
  • WRONG_VERSION_NUMBER: HTTPS portuna düz HTTP konuşuluyor ya da proxy ayarı hatalı.
  • SSLV3_ALERT_HANDSHAKE_FAILURE / UNSAFE_LEGACY_RENEGOTIATION_DISABLED: Eski sunucu ile yeni OpenSSL uyumsuzluğu.

Çözüm yolları

  1. CA paketini yenileyin:
    pip install --upgrade requests certifi
  2. Kurumsal veya özel bir CA için dosya yolu verin:
    import requests
    r = requests.get("https://ornek.com", verify="/yol/kok-ca.pem")
  3. Tüm süreç için ortam değişkeni kullanın: REQUESTS_CA_BUNDLE=/yol/kok-ca.pem.
  4. Oturum düzeyinde tek yerde tanımlayın:
    s = requests.Session()
    s.verify = "/yol/kok-ca.pem"
  5. Proxy kullanıyorsanız HTTPS_PROXY değerinin doğru şemayı (http:// ile proxy adresi) taşıdığından emin olun.
  6. Sunucu yalnızca eski TLS sunuyorsa önce sunucuyu güncellemeyi deneyin; istemciye eski protokol zorlamak güvenlik açığı doğurur.

Kaçınılması gerekenler

verify=False kullanımı hata mesajını susturur ama ortadaki adam saldırılarına kapı açar; yalnızca yerel, geçici testlerde düşünülmelidir. Sunucu sertifikasının zincir durumunu SSL denetleme aracıyla görüp eksik ara sertifikayı sunucu tarafında tamamlamak en temiz çözümdür. Benzer sorunlar için SSL sorun giderici sayfasına da bakabilirsiniz.

Ek notlar

  • Bir betik tek bir uç noktaya hata veriyor, diğerlerine vermiyorsa sorun istemcide değil o sunucunun zincirindedir.
  • Tekrar deneme (retry) eklemek geçici ağ sorunlarında yardımcı olur, ancak sertifika hatasını çözmez.
  • Docker ve CI ortamlarında ca-certificates paketinin kurulu olduğundan emin olun.

Tarayıcıda sorunsuz açılan bir adresin Python'da hata vermesi şaşırtıcı değildir: tarayıcılar eksik ara sertifikayı kendileri tamamlayabilir, requests tamamlamaz.

Özet: önce SSLError'un iç nedenini okuyun; çoğu durumda CA paketi ya da zincir düzeltilerek doğrulama açık bırakılabilir.

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ç