2011-11-30 26 views
21

Güvenli bir siteye (HTTPS) erişmek için bir pycurl betiği yazmaya çalışıyorum. Aşağıda hatası alıyorumpycurl ve SSL sertifikası

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")) 

..

pycurl.error: (60, 'SSL sertifikası sorunu, CA sertifika Tamam olduğunu doğrulamak Detayları:. \ Nhata: 14090086: SSL rutinleri: SSL3_GET_SERVER_CERTIFICATE : sertifika SSL sertifika alınamadı gibi kod, başarısız

) 'doğrulama başarısız. Benim koduna aşağıdaki satırları eklerseniz

hata gitti.

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

Yukarıdaki kod sertifika doğrulama atlayacak. Ama onun 'ortadaki adam' saldırısına maruz kaldı.

benim yerel sertifika deposunda SSL sertifikasına sahip biliyorum. Herkes benim sertifikasını dışa ve ona kodumu nasıl kullanılacağını biliyor musunuz .. Bazı örnek kodlar .. Zaman ayırdığınız için

sayesinde muhteşem olacak!

cevap

18

Haklısınız, yaptığınız gibi, özellikle de ortadaki bir saldırıya, özellikle de most recent SSL vulnerabilities'un ışığında. Varsayılan olarak

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() 

bukle eski bir sertifika listesi ile birlikte gelir: Aşağıdaki gibi çözebilirsiniz. Güncellemek isteyip istemediğiniz veya test için kendi sertifikalarınızı kullanıp kullanmayacağınız, güncellenmiş-certificate-chain.crt dosyasını erişilebilir bir konuma yerleştirdiğinizden emin olun ve işaret etmek için pycurl.CAINFO seçeneğini kullanın.

Ayrıca emin pycurl.SSL_VERIFYHOST 2'ye en yüksek güvenlik kontrolü ayarını yapın.

1

Eğer cURL belgeleri about SSL certificates okudunuz mu? Bu doğrudan, öğe 2 ... sorunuzu ele özellikle görünüyor:

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); 

pycurl modülü CAPATH seçeneği içeren, bu nedenle bu kodunuzda uygulamak basit olmalıdır gibi görünüyor.

+0

Cevabınız için teşekkürler .. Makaleyi okudum .. Daha sonra aşağıdaki seçeneklerle curl.exe'yi kullanarak cert almaya çalıştım .. curl.exe --cacert test.crt https: // secure-site/.. Aşağıdaki hatayı aldım .. "kıvrılma: (1) Protokol https desteklenmiyor veya libcurl içinde devre dışı bırakılmamış" .. Herhangi bir fikir nasıl tamir edebilirim? – K2M

+0

Curl kaynağını indirdim ve kendi başıma inşa ettim .. Hemen hazır bir Curl.exe dosyasını yükleyebileceğim bir url var "http://curl.haxx.se/latest.cgi?curl=win32-ssl-devel- msvc ".. Bunu keşfedeceğim! – K2M

İlgili konular