目錄
引言
問題解析
解決方法
跳過證書驗證
采用證書認證
結語
引言
最近一直推薦學生們在課程實驗中使用curl及其libcurl。curl
?是一個強大的命令行工具,用于在命令行中進行數據傳輸。它支持多種協議,如 HTTP、HTTPS、FTP、FTPS、SCP、SFTP 等。在網絡開發、系統管理和數據抓取等領域被廣泛應用。例如,通過?curl
?命令可以方便地向服務器發送 GET、POST 等請求,獲取網頁內容、上傳文件等。
而?libcurl
?則是與之緊密相關的一個重要庫。它為開發者提供了在程序中實現網絡傳輸功能的強大能力,廣泛應用于各種編程語言和項目中。
但是在x210開發板上使用curl訪問https網站時遇到下面的問題:
?curl: (60) SSL certificate problem: unable to get local issuer certificateMore details here: https://curl.se/docs/sslcerts.htmlcurl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.
?
今天就分享一下如何解決這個問題。?
問題解析
在嵌入式開發板上運行curl
時出現SSL certificate problem: unable to get local issuer certificate
錯誤,這意味著curl
無法驗證服務器證書的合法性,因為它找不到用于驗證服務器證書的頒發者證書。在官方文檔curl - SSL CA Certificates中詳細解釋了出現問題的原因和幾種解決方法。
解決方法
跳過證書驗證
在命令行使用-k
或--insecure
選項告訴curl
不要驗證對等方。但在生產環境中,跳過驗證會帶來安全風險,因為這會使連接容易受到中間人攻擊,所以僅適用于實驗或開發階段。
如果是在程序中,可以加入如下的語句禁用本地證書校驗:
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
采用證書認證
跳過證書驗證雖然可以簡單地解決問題,但是它有安全隱患。比較好的方法是獲得CA證書。下面以Windows 11自帶的瀏覽器為例介紹一下相關步驟:
在瀏覽器的地址欄可以找到一個鎖的標志。
點擊鎖的標志會顯示網站的安全信息:
點擊“連接安全”,顯示網站的安全信息,在這個小窗口的右上角可以看到一個證書的圖標。
點擊證書圖標后進入證書查看器。
在證書查看器中切換到詳細信息。
點擊下方的導出按鈕,可以將證書保存為crt格式。
?在主機的Linux上用下面的命令將crt格式轉換為pem格式:
openssl x509 -in baidu_com.crt -out baidu_com.pem
然后將pem格式拷貝到開發板上。?
然后使用下面的命令測試證書:
./curl -v --cacert baidu_com.pem https://www.baidu.com
?如果遇到如下錯誤信息:curl和curl: (60) SSL certificate problem: certificate is not yet valid,說明開發板的時間不對,可以在開發板上用如下命令設置時間:
date -s "2025-04-29 14:30:00"
再執行上面的語句就應該可以正常訪問https網站了。
?
結語
希望以上內容能幫助你更好地理解和解決?curl
?相關的問題。如果你還有其他疑問,歡迎繼續探索和交流。