İnternet üzerinden güvenli iletişim, Güvenli Yuva Katmanı (SSL) sertifikalarına büyük ölçüde dayanmaktadır. Python kodunuz “SSL CERTIFICATE_VERIFY_FAILED” hatasıyla karşılaştığında, sunucunun SSL sertifikasının doğrulanmasında bir başarısızlığı işaret eder. Bu kapsamlı kılavuz, bu hatanın nedenlerini inceleyecek ve pratik çözümler sunacaktır.
İçindekiler
- SSL Sertifikalarını Anlamak
- SSL CERTIFICATE_VERIFY_FAILED’ın Köken Nedenleri
- Etkin Sorun Giderme Stratejileri
- Güvenli Bağlantılar İçin En İyi Uygulamalar
SSL Sertifikalarını Anlamak
Bir SSL sertifikası, bir web sitesinin kimliğini doğrulayan ve güvenli HTTPS iletişimini sağlayan dijital bir kimlik belgesidir. İstemci (Python programınız) ve sunucu arasında alışveriş edilen verileri şifrelemek için açık anahtarlı kriptografiyi kullanır. Bir HTTPS bağlantısı sırasında, Python kodunuz (veya tarayıcınız) sunucunun sertifikasını geçerliliğini, yayıncısını ve iptal durumunu kontrol ederek doğrular.
SSL CERTIFICATE_VERIFY_FAILED’ın Köken Nedenleri
“SSL CERTIFICATE_VERIFY_FAILED” hatası, bu doğrulama işlemi başarısız olduğunda ortaya çıkar. Birkaç faktör katkıda bulunabilir:
- Kendi kendine imzalanmış sertifikalar: Güvenilir bir Sertifika Yetkilisi (CA) tarafından değil, web sitesi sahibi tarafından verilen sertifikalar genellikle işaretlenir. Python varsayılan olarak yalnızca bilinen CA’lara güvenmeyi tercih eder.
- Süresi dolmuş sertifikalar: Süresi dolmuş bir sertifika bağlantıyı güvenilmez hale getirir.
- Sistem saati hataları: Sertifika geçerliliği zamana duyarlıdır; yanlış bir sistem saati doğrulama başarısızlığına neden olabilir.
- İptal edilmiş sertifikalar: Güvenliği ihlal edilmiş bir sertifika, yayıncısı tarafından iptal edilebilir.
- Ev sahibi adı eşleşmemesi: Sertifikanın Ortak Adı (CN) veya Alternatif Konu Adları (SAN’lar), bağlandığınız ev sahibi adıyla eşleşmelidir.
- CA zinciri sorunları: Sertifika yetkilisi güven zincirindeki sorunlar doğrulamayı bozacaktır. Sertifikanın güvenilir bir kök CA’ya kadar doğrulanabilir bir güven zincirine ihtiyacı vardır.
- Ağ bağlantı sorunları: Ağ kesintileri sertifika doğrulamasını engelleyebilir.
Etkin Sorun Giderme Stratejileri
Çözüm, altta yatan nedene bağlıdır. İşte yapılandırılmış bir yaklaşım:
- Sertifikayı Doğrulayın (dikkatli olun): Kendi kendine imzalanmış veya güvenilmeyen sertifikalar için, doğrulamayı geçici olarak devre dışı bırakabilirsiniz (üretim için kesinlikle önerilmez):
import ssl import urllib.request context = ssl._create_unverified_context() response = urllib.request.urlopen('https://your-website.com', context=context) # ... yanıtı işleyin ...
- Sertifikayı Güvenilir Depolama Alanınıza Ekleyin: Kendi kendine imzalanmış sertifikalar için, sertifikayı sisteminizin güvenilir sertifikalar deposuna ekleyin. Bu işlem işletim sistemine göre değişir.
- Sistem Zamanını Düzelti: Sistem saatinizin doğru olduğundan emin olun.
- Ev Sahibi Adını Doğrulayın: Kodunuzdaki ev sahibi adının sertifikanın CN’si veya SAN’larıyla eşleştiğinden emin olun.
requests
kütüphanesini kullanın (Önerilir):requests
kütüphanesi sağlam SSL işleme sunar.verify=True
(varsayılan) doğru doğrulamayı sağlar. Özel CA paketleri için:import requests try: response = requests.get('https://your-website.com', verify=True) response.raise_for_status() # Kötü yanıtlar için HTTPError oluşturur (4xx veya 5xx) # ... yanıtı işleyin ... except requests.exceptions.RequestException as e: print(f"Bir hata oluştu: {e}") #Özel bir CA paketi kullanarak: response = requests.get('https://your-website.com', verify='/path/to/your/ca_bundle.pem')
- Ağ Bağlantısını Kontrol Edin: Ağ sorunlarını ortadan kaldırın.
Güvenli Bağlantılar İçin En İyi Uygulamalar
Güvenilir CA’lardan geçerli sertifikalar kullanmayı önceliklendirin. Doğru doğrulama ile (verify=True
) requests
kütüphanesini kullanın. Kontrollü testler dışında doğrulamayı devre dışı bırakmaktan kaçının. En iyi güvenlik için sisteminizin sertifikalarını ve saatini düzenli olarak güncelleyin.