2012-01-16 23 views
8

Estoy usando libcurl en mi aplicación C para comunicarme con un servidor HTTPS que configuré. Genere un certificado autofirmado en ese servidor que deseo usar con curl.Agregar certificado SSL autofirmado para libcurl

Soy consciente de establecer CURLOPT_SSL_VERIFYPEER en 0 para eludir la verificación de SSL, pero deseo agregar el certificado generado a los certificados de CA "válidos" de curl.

He intentado configurar CURLOPT_CAPATH y CURLOPT_SSLCERT con la ubicación de la clave pública del servidor SSL, pero no pasa la verificación.

¿Cómo puedo agregar mi propio certificado CA/autofirmado para que libcurl lo valide correctamente?

+3

Añadir la actualización como una respuesta. Por cierto, la opción '--libcurl' curl puede generar código fuente libcurl-using (para ver qué opciones puede usar) si ya tiene un curl-comando que funciona. – jfs

Respuesta

2

Para agregar un certificado autofirmado, utilice CURLOPT_CAINFO

Para recuperar el certificado público SSL de un sitio, utilice

openssl s_client -connect www.site.com:443 | tee logfile 

El certificado es la parte marcada por ----BEGIN CERTIFICATE---- y
---END CERTIFICATE---- .

Guardar ese certificado en un archivo, y el uso de rizo de una manera así:

CURL* c = curl_easy_init(); 
curl_easy_setopt(c, CURLOPT_URL, "https://www.site.com"); 
curl_easy_setopt(c, CURLOPT_CAINFO, "/path/to/the/certificate.crt"); 
curl_easy_setopt(c, CURLOPT_SSL_VERIFYPEER, 1); 
curl_easy_perform(c); 
curl_easy_cleanup(c); 
0

En primer lugar, se mezclan tipo de archivos "Autoridad de Certificación" y archivos "certificado" que me confunde.

¿Cómo puedo añadir mi propia CA/Certificado autofirmado para que se libcurl validar con éxito?

Esto puede verse como una respuesta complementaria a la anterior. En el caso de que desee agregar una CA con firma automática (cada CA raíz está autofirmada) para que libcurl valide correctamente el certificado de un sitio web, que ha sido generado por la CA, luego continúe leyendo.

Con CURLOPT_CAINFO debe pasar el archivo "Certificate Authority" (CA) que se utilizó al generar el certificado (que no es de CA) del sitio que desea verificar.

(No sé si esta opción funciona pasándola un certificado que no sea de CA, la documentación no es muy clara al respecto, y la respuesta anterior tiene 2 votos, por lo que si alguien lo ha probado, coméntelo)

También puede pasar un archivo de cadena de autoridad de certificación que contiene la CA que se utilizó, en caso de que no fuera una CA raíz.

Aquí hay un pequeño tutorial que he encontrado que puede ayudar a probar su solución:

La creación de una entidad de certificación raíz privada: http://www.flatmtn.com/article/setting-openssl-create-certificates

Creación de un certificado de sitio: http://www.flatmtn.com/article/setting-ssl-certificates-apache

Cuestiones relacionadas