2011-11-30 20 views
21

Próbuję napisać skrypt pycurl, aby uzyskać dostęp do zabezpieczonej strony (HTTPS).pycurl and SSL cert

c = pycurl.Curl() 
c.setopt(pycurl.USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0') 
c.setopt(pycurl.URL, 'https://for-example-securedsite') 
c.setopt(pycurl.COOKIEFILE, 'cookie.txt') 
c.setopt(pycurl.COOKIEJAR, 'cookies.txt') 
c.setopt(pycurl.WRITEDATA, file("page.html","wb")) 

otrzymuję poniżej błąd ..

pycurl.error: (60, „Problem certyfikat SSL, upewnij się, że jest OK cert CA szczegóły:. \ NBłąd: 14090086: rutyny SSL: SSL3_GET_SERVER_CERTIFICATE : certyfikat nie powiódł się ")

Kod nie powiódł się, ponieważ nie udało się uzyskać certyfikatu SSL.

Błąd zniknął, jeśli dodaję poniższe linie do mojego kodu.

c.setopt(pycurl.SSL_VERIFYPEER, 0) 
c.setopt(pycurl.SSL_VERIFYHOST, 0) 

Powyższy kod pominie weryfikację certyfikatu. Ale poddawany jest atakowi "człowiek w środku".

Wiem, że mam certyfikat SSL w moim lokalnym magazynie certyfikatów. Czy ktoś wie, jak wyeksportować mój certyfikat i użyć go mój kod. Niektóre przykładowe kody będą niesamowite ..

Dziękujemy za poświęcony czas!

Odpowiedz

18

Masz rację, sposób, w jaki to robisz, poddaje cię atakowi typu "człowiek w środku", szczególnie w świetle most recent SSL vulnerabilities. Możesz go rozwiązać w następujący sposób:

import pycurl 
curl = pycurl.Curl() 
curl.setopt(pycurl.URL, "https://your-secure-website.com/") 
curl.setopt(pycurl.SSL_VERIFYPEER, 1) 
curl.setopt(pycurl.SSL_VERIFYHOST, 2) 
curl.setopt(pycurl.CAINFO, "/path/to/updated-certificate-chain.crt") 
curl.perform() 

Zwinięcie domyślnie zawiera nieaktualną listę certyfikatów. Niezależnie od tego, czy chcesz go zaktualizować, czy po prostu użyć własnych certyfikatów do testowania, pamiętaj o umieszczeniu pliku updated-certificate-chain.crt w dostępnej lokalizacji i skorzystaj z opcji pycurl.CAINFO, aby wskazać to.

Upewnij się także, że pycurl.SSL_VERIFYHOST jest ustawione na 2, najwyższe ustawienie kontroli bezpieczeństwa.

1

Czy znasz dokumentację cURL about SSL certificates? Wydaje się to bezpośrednio zaadresować pytanie ... zwłaszcza, Punkt 2:

2. Get a CA certificate that can verify the remote server and use the proper 
    option to point out this CA cert for verification when connecting. For 
    libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath); 

To wygląda moduł pycurl zawiera opcję CAPATH, więc to powinno być łatwe do wdrożenia w kodzie.

+0

Dzięki za odpowiedź .. Przeczytałem artykuł .. Następnie próbowałem uzyskać certyfikat za pomocą curl.exe z następującymi opcjami .. curl.exe --cacert test.crt https: // secure-site/.. Mam następujący błąd .. "curl: (1) Protokół https nie jest obsługiwany lub wyłączony w libcurl" .. Wszelkie pomysły jak to naprawić? – K2M

+0

Ściągnąłem źródło curla i zbudowałem na własnym komputerze. Właśnie dostałem adres URL, gdzie mogę pobrać gotowe curl.exe "http://curl.haxx.se/latest.cgi?curl=win32-ssl-devel- msvc ".. Zbadam to! – K2M

Powiązane problemy