python - example - Pycurl y SSL cert
install pycurl (2)
¿Has leído la documentación de la cURL sobre certificados SSL ? Esto parece abordar directamente su pregunta ... en particular, el punto 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);
Parece que el módulo pycurl contiene la opción CAPATH
, por lo que debería ser fácil de implementar en su código.
Estoy tratando de escribir un script de pycurl para acceder a un sitio seguro (HTTPS).
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"))
Estoy recibiendo el error de abajo ..
pycurl.error: (60, ''Problema con el certificado SSL, verifique que el certificado CA esté bien. Detalles: / nerror: 14090086: Rutinas SSL: SSL3_GET_SERVER_CERTIFICATE: error en la verificación del certificado'')
El código falló, ya que no pudo obtener el certificado SSL.
El error desapareció si agrego las líneas siguientes a mi código.
c.setopt(pycurl.SSL_VERIFYPEER, 0)
c.setopt(pycurl.SSL_VERIFYHOST, 0)
El código anterior omitirá la verificación del certificado. Pero está sujeto al ataque del ''hombre en medio''.
Sé que tengo el certificado SSL en mi almacén de certificados local. ¿Alguien sabe cómo exportar mi certificado y usarlo mi código? Algunos códigos de ejemplo serán geniales.
¡Gracias por tu tiempo!
Tiene razón, la forma en que lo hace lo somete a un ataque de hombre en el medio, especialmente a la luz de las vulnerabilidades más recientes de SSL . Puedes resolverlo de la siguiente manera:
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()
curl por defecto viene con una lista de certificados obsoletos. Si desea actualizarlo o simplemente usar sus propios certificados para realizar pruebas, asegúrese de colocar el archivo updated-certificate-chain.crt en una ubicación accesible y use la opción pycurl.CAINFO para señalarlo.
También asegúrese de que pycurl.SSL_VERIFYHOST esté establecido en 2, la configuración de comprobación de seguridad más alta.