2012-01-16 160 views
8

我在我的C應用程序中使用libcurl與我設置的HTTPS服務器進行通信。我在該服務器上生成了一個我希望用於curl的自簽名證書。爲libcurl添加自簽名SSL證書

我知道將CURLOPT_SSL_VERIFYPEER設置爲0可繞過SSL驗證,但我希望將生成的證書添加到curl的「有效」CA證書。

我已經嘗試將CURLOPT_CAPATH和CURLOPT_SSLCERT設置爲服務器SSL公鑰的位置,但未能通過驗證。

如何添加我自己的CA /自簽名證書,以便libcurl成功驗證它?

+3

添加更新內容一個答案。順便說一句,'--libcurl' curl選項可以生成libcurl-使用源代碼(看看你可以使用什麼選項),如果你已經有一個工作捲曲命令。 – jfs 2012-01-16 21:09:58

回答

2

要添加一個自簽名證書,使用CURLOPT_CAINFO

要檢索網站的SSL公共證書,使用

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

該證書是由----BEGIN CERTIFICATE----
---END CERTIFICATE----標記的部分。

保存該證書到一個文件,像這樣用捲曲的方式:

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

首先,你有種混「證書頒發機構」文件和「證書」文件,這讓我困惑。

如何添加我自己的CA /自簽名證書,以便libcurl將 成功驗證它?

這可能被視爲上述補充答案。 如果您想添加自簽名CA(每個根CA都是自簽名的),以便libcurl將成功驗證由CA生成的網站證書,請繼續閱讀。

使用CURLOPT_CAINFO時,您需要傳遞在生成要驗證的站點(非CA)證書時使用的「證書頒發機構」文件(CA)。

(我不知道這個選項是通過傳遞一個非CA證書來工作的,這個文檔並不是很清楚,而且以前的答案有2個回覆,所以如果有人測試了它,請評論)

您還可以傳遞包含所使用的CA的證書頒發機構鏈文件,以防它不是根CA.

這裏有一個小教程,我已經找到了可以幫助您測試您的解決方案:

創建私有根CA: http://www.flatmtn.com/article/setting-openssl-create-certificates

創建站點證書: http://www.flatmtn.com/article/setting-ssl-certificates-apache