2016-10-15 146 views
1

我有一個C程序使用OpenSSL庫建立連接到httpbin.org使用SSL/TLS。客戶端程序能夠與服務器建立連接。客戶端程序驗證來自專用CA的證書?

現在,我想連接到我自己的服務器,該服務器的證書由我們自己的私人或內部CA簽名。在客戶端,我想強制OpenSSL使用我們自己的CA進行證書驗證。所以,我的問題是:

如何使用庫加載我自己的CA證書並強制它僅使用該CA來驗證服務器證書?

回答

1

根據您擁有CA的方式(即X509結構列表,單個文件,帶有證書的目錄...),指定應用於驗證的CA可以通過多種方式完成。由於最後一點在問題中沒有詳細說明,我將答案限制在最簡單的情況下:單個CA或單個文件中PEM格式的CA列表。設置該文件作爲唯一的CA存儲的驗證可以與SSL_CTX_verify_location就像這樣:

SSL_CTX_load_verify_locations(ctx, "ca.pem", NULL); 

如需進一步信息(如錯誤處理)見the documentionexamples on how to use it

+2

告訴別人去搜索網絡是沒有幫助的。出於好奇,爲什麼你主要提供沒有代碼的答案?堆棧溢出是一個編程和開發網站,但你的答案往往是MCVE缺陷類型。上面的答案應該是一個評論。這是我很少提出答案的原因。 – jww

+2

@jww:我不認爲這個stackoverflow是一個代碼編寫服務,但我認爲它應該提供OP缺失的基本信息。在這種情況下,我認爲OP不知道如何指定CA:*「我如何使用庫加載我自己的CA證書...」*。因此,我提供了所使用函數的名稱,函數的文檔以及大量顯示如何使用函數的示例的鏈接。如果你覺得應該做更多的事情,請隨時自己動手做。 –

+0

Stack Overflow是編程和開發問題的網站。幾乎沒有辦法避免提供功能,代碼,使用和解釋。不幸的是,這意味着許多答案將是複製/粘貼的性質。也許你應該回顧一下[我如何爲一個問題寫出一個好的答案?](http://meta.stackexchange.com/q/7656/173448)你似乎是唯一不願意在答案中提供代碼的人。我發現你的立場在迴避答案,因爲它的代碼寫作服務幾乎是可笑的。 – jww