Obecnie zmagam się, aby biblioteka requests wykonała proste żądanie GET
na mojej stronie z certyfikatem Let's Encrypt. Wszystko jest dobrze z witryną i mogę uzyskać do niej dostęp z Chrome. (W tej chwili używam systemu OSX El Capitan).Żądania protokołu Python SSL i zaszyfruj certyfikaty
Najpierw próbowałem robić GET
wniosek do strony:
>>> import requests
>>> requests.get('https://example.com')
To daje mi:
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
Następnie próbowałem różnych rzeczy, w tym dotarcie z Let's Encrypt authority certificate, a następnego openssl
Polecenie weryfikuje certyfikat mojej witryny:
> openssl s_client -CAfile ./letsencryptauthorityx1.pem -connect example.com:443
Wyjście która obejmowała następujące kierunku dna:
...
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: ...
Session-ID-ctx:
Master-Key: ...
Key-Arg : None
Start Time: 1452865123
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
Może mi brakuje czegoś tutaj, ale wygląda mi się, że moja witryna została zweryfikowana zgodnie z certyfikatem Let autorytetem Szyfrowanie mi dostarczone. Tak, ja szczęśliwie zmieniło moje kodu Pythona do:
>>> requests.get('https://example.com', verify='./letsencryptauthorityx1.pem')
Ale nadal zachować uzyskiwanie błąd requests.exceptions.SSLError
. Próbowałem zostały również stosując format certyfikatu autoryzacji w DER
, ale potem pojawia się następujący błąd z requests
:
requests.exceptions.SSLError: unknown error (_ssl.c:2825)
Czy ktoś może kształcić mnie, w jaki sposób przejść o ustalenie to?
Używam OSX (El Capitan). Próbowałem już dodać certyfikat ISRG Root X1 (według https://support.apple.com/kb/PH18677?locale=en_US) i uczynić go w pełni zaufanym w całym systemie, ale nadal daje ten sam błąd CERTIFICATE_VERIFY_FAILED. –
Czy możesz wysłać jako prywatną wiadomość swoją nazwę hosta za pomocą tego certyfikatu? Właśnie przeinstalowałem mojego Maca używając MAC OS X El Capitan i działa od razu po wyjęciu z pudełka bez instalowania żadnych urzędów certyfikacji. Myślę, że serwer WWW nie jest poprawnie skonfigurowany do korzystania z pełnego łańcucha certyfikatów. Powodem, dla którego nie ma niepowodzenia w openssl, jest fakt, że podajesz CA bezpośrednio w CLI. –
Masz rację. Jeśli skonfiguruję serwer WWW tak, aby korzystał z pełnego łańcucha certyfikatów, działa jak urok! Zmodyfikuj odpowiedź tutaj lub dodaj inną odpowiedź, dołączając porady dotyczące korzystania z pełnego łańcucha certyfikatów na serwerze internetowym, a następnie oznaczę go jako zaakceptowany. –