2010-05-25 14 views
6

He encontrado que realmente hay muy poca información sobre este tema. Ya tengo un dll haciendo publicaciones exitosas usando libcurl.Usando libcurl & SSL

He compilado libcurl con openssl para funcionalidad ssl.

Aquí está un ejercicio de mi configuración de curvatura original.

curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, errorBuffer); 

    //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER , 1); 
    //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST , 1); 
    //curl_easy_setopt(curl, CURLOPT_CAINFO , "./ca.cert"); 

    curl_easy_setopt(handle, CURLOPT_POSTFIELDS, cParam); 
    curl_easy_setopt(handle, CURLOPT_POSTFIELDSIZE, strlen(cParam)); 
    curl_easy_setopt(handle, CURLOPT_FOLLOWLOCATION, 1); 
    curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, Request::writer); 
    curl_easy_setopt(handle, CURLOPT_WRITEDATA, &buffer); 
    curl_easy_setopt(handle, CURLOPT_URL, cURL); 

Mi pregunta a los que hemos hecho esto antes, ¿es tan fácil como simplemente añadiendo las líneas de arriba para obtener SSL funcione (siempre y cuando exista el certificado)? ¿O es más complicado?

Lo curioso es que no estoy completamente seguro de cómo funciona SSL. Nunca he trabajado con eso antes. ¿Debo guardar una clave en mi aplicación y enviarla con cada solicitud? De todos modos mi pregunta principal fue la primera. Gracias de antemano.

+1

relacionado: http://stackoverflow.com/questions/197444/building-libcurl-with-ssl-support-on- windows –

Respuesta

2

Sí, es así de simple. Solo asegúrese de que el archivo "ca.cert" que tiene es un certificado de CA verdadero que pueda verificar el certificado de su servidor.

+0

¿De dónde obtienes este archivo 'ca.cert'? Porque bajo windows, thx a chrome -> opciones de desarrollador -> seguridad solo puedo exportar archivos '.cer' (sin 't') –

+0

Si quieres confiar en las mismas CA en las que Firefox confía, puedes obtener tales un paquete de cert de ca desde [aquí] (https://curl.haxx.se/docs/caextract.html) –

0

Todo lo que necesita hacer para usar SSL con libcurl es dar una URL https en lugar de una url http. La única opción que debe establecer con curl_easy_setopt es CURLOPT_URL, aunque solo imprimirá los datos recibidos en stdout si no especifica una devolución de llamada de escritura.

CURL *handle = curl_easy_init(); 
char url[] = "https://google.com"; 
curl_easy_setopt(handle, CURLOPT_URL, url); 
curl_easy_perform(handle); 
+1

Esto no podría ser más incorrecto. –

0

Asegúrese de que cuando se utiliza CURLOPT_SSL_VERIFYHOST se establece el valor real de 2L (que es el valor por defecto) en lugar de 1 (como se muestra como un comentario en ese ejemplo), si realmente quiere comprobar las coincidencias de nombre de host, de lo contrario, solo verificaría la existencia de un "Nombre común" (CN) en el certificado.