Python'ın request kütüphanesinde çalışırken özellikle self-signed sertifikalar ile sorunlar yaşandığında muhtemelen sistem geneline eklediğiniz bir sertifikanın Python request kütüphanesinde kullanılmadığını görebilirsiniz.
Bunun örneği için aşağıdaki gibi bir Python kodu yazarak başlayabiliriz.
import requests
response = requests.get(url="https://en.wikipedia.org/wiki/Zonguldak")
Bu kod sonucu aşağıdaki gibi bir hata alınmaktadır.
requests.exceptions.SSLError: HTTPSConnectionPool(host='en.wikipedia.org', port=443): Max retries exceeded with url: /wiki/Zonguldak (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:997)')))
Bu hatadan kurtulmanın bir yolu aşağıdaki satırda "verify = False" parametresinin eklenmesi olarak internette çözüm bulunabilmektedir. Fakat bu adımla birlikte sertifika kontrolünü kontrol edilmemesini sağlamaktasınız.
response = requests.get(url="https://en.wikipedia.org/wiki/Zonguldak",verify = False)
Bu nedenle Debian tabanlı sistemlerde bu sorunun en güzel çözümü aşağıdaki gibi uygulanabilmektedir. RPM tabanlı sistemlerde ise ca-certificates.crt yerine ca-bundle.crt kullanılmaktadır.
import requests
import os
os.environ['REQUESTS_CA_BUNDLE'] = os.path.join('/etc/ssl/certs/','ca-certificates.crt')
response = requests.get(url="https://en.wikipedia.org/wiki/Zonguldak")
Bu şekilde çalıştırıldığında artık istenilen sunucuya SSL ile bağlantı kurabilirsiniz. Tabi ki sistem genelinde ilgili sertifikanın eklenmiş olması gerekeceğini unutmayalım.