2014-05-07 16 views
0

我正在使用libcurl進行小型c應用程序。該項目使用https並需要驗證服務器證書和客戶端證書。由於我在不安全的環境中工作,因此我無法使用選項來取消驗證。用於libcurl的內聯證書而不是使用外部捆綁包?

我目前正在嘗試驗證服務器端證書。第一次嘗試給了我一個預期的錯誤:

Peer certificate cannot be authenticated with given CA certificates 

正如所說的預期錯誤,我明白什麼是消息的含義。我挖入了libcurl的文檔,發現它支持「證書包」,並且年輕版本不是附帶一個包。我發現的所有選項(以及所有解釋)都是指在運行時讀取的證書文件,顯然建議在本地軟件包中包含所需的CA證書。

相反,我寧願有一個證書直列到應用程序中,因此編譯。這有一定道理的這種特殊情況下,由於應用程序僅試圖訪問一個單一的,硬編碼的URL,所以服務器。我接受如果服務器證書發生更改,我將不得不更換所有已部署的應用程序副本。但是我沒有在文檔中找到任何選項。我更喜歡這個策略,因爲它允許應用程序更加緊湊的部署:單個文件而不是結構和運行時配置。

所以我的問題是:libcurl是否提供在編譯時包含一個CA證書,可以在運行時使用,而不必依賴外部包?

回答

1

libcurl驗證證書的部分由openssl處理。您可以使用SSL_CTX_use_certificate在運行時安裝證書,或使用SSL_CTX_set_verify用您自己的密碼覆蓋SSL驗證功能。

檢查curlx.c爲例。

+1

另一個很有特色的例子是「內存中的CA證書」:http://curl.haxx.se/libcurl/c/cacertinmem.html –

+0

目前看起來不錯,我會試試看。由於我對c不完全熟悉,因此需要一點時間。但我會回報。 – arkascha