2016-01-15 28 views
6

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?

Odpowiedz

2

Brzmi jak CA CERTS na urządzeniu nie są aktualne lub serwer internetowy nie jest skonfigurowany do serwera pełnego łańcucha certyfikatów.

+0

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. –

+0

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. –

+0

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. –