從0到1搭嵌入式工程 裝置與伺服器後台通訊的搭建

2021-08-19 19:50:04 字數 1891 閱讀 6962

通過什麼協議, 需要什麼依賴,加密, 做什麼通訊,心跳保持,前後相容問題。

2,用http還是https,使用http協議,傳輸的文字會以明文的形式在網際網路上傳輸,可能會被擷取,檢視, 使用https協議,訊息會被加密後傳送到網路上,中間資料被截到後,也無法解密。保證了安全性,https會有認證和解密過程,效率會低一些。對於不敏感的資訊,可以使用http,敏感資訊,使用https。

3,使用https時,需要有證書的驗證。

對於http來說,我們在構建請求引數時關閉認證即可,curl_easy_setopt(curl, curlopt_ssl_verifyhost, 0l); curl_easy_setopt(curl, curlopt_ssl_verifypeer, 0l); 

我們使用瀏覽器訪問https的時候,瀏覽器會幫我們載入**的安全證書進行加密。但是我們用curl請求https時,沒有通過瀏覽器,就需要自己手動指定乙個安全證書進行加密。

curlopt_ssl_verifypeer 設定為0 表示禁止 curl 驗證對等證書(peer』s certificate)。curlopt_ssl_verifyhost 設定為 1 是檢查伺服器ssl證書中是否存在乙個公用名(common name)。注:公用名(common name)一般來講就是你將要申請ssl證書的網域名稱 (domain)或子網域名稱(sub domain)。 設定成 2,會檢查公用名是否存在,並且是否與提供的主機名匹配。 在生產環境中,這個值應該是 2(預設值)。

關於ca的掃盲貼,參考:

4, 不管用http還是https,我們還需要使用自己的加密來保證, 請求的不可偽造性,保證後台的安全。

每乙個請求,都會有帶到伺服器上引數,我們使用自己的密碼,對這些引數進行加密,取hash值,放在請求引數裡帶到伺服器,伺服器收到請求後,再用密碼也對這些引數加密,取hash值,如果hash值和收到的hash值一致,認為請求是有效的。

對於嵌入式來說,每乙個裝置在出廠的裝置資訊中,儲存特有的密碼值(或者寫在**中的hardcode密碼), 用這個密碼進行加密,以驗證是我們的合法裝置。

採用hmac加密方式為hmac-sha1,key=1234,有請求引數parama=a¶mb=b,呼叫hmac_sha1(),得到加密結果,進行base64編碼,再把base64執行urlencode,編碼成url格式賦值給hmac變數, 在請求的引數中,再加入hmac=***這個密文,傳送給server。server就可以通過這種方式對url進行驗證了。

有了這些,我們就可以呼叫 curl_easy_perform(curl), 執行上面我們構造的請求了。

1,連線上網路以後,先把時間同步下來,設定到系統中去;

2,把裝置的did傳送給伺服器,檢查did是否是合法的。

3,把裝置的執行資訊,定期往伺服器上報, 與伺服器之間保持乙個心跳。如果伺服器在一段時間內沒有收到裝置傳送的心跳請求,裝置可能無網路或者掉電,認為裝置離線。在這個請求中,可以把裝置的網路情況、統計資訊、功能開關等一些我們關心的統計資訊,傳送到後台,方便資料分析, 在請求的返回資訊中,也可以加一些有用資訊,供裝置使用,比如設定到伺服器上的設定。

4,建立乙個單獨的執行緒,負責心跳訊號的保持,每隔一段時間(可以是兩小時附近的隨機值),傳送一次請求, 避免網路原因,如果出錯,可以重試傳送。 同時注意在裝置過多的情況下,將請求的時間點分散,因為時間上是從連上網以後的相對時間,所以理論上,不同的裝置,是分散的。

相容性

對於同乙個功能的api,如果後台需要增加新的引數,而韌體因為沒有更新,還用原來實現的請求方法,當服務被部署以後,就會出現不相容的問題。

為了避免不相容的情況,我們就需要把同乙個功能的api,分成多個,比如/v1/time, /v2/time, /v3/time, 他們實現同乙個功能。對於最新實現的韌體來說,可以使用v3的api請求,對於沒有公升級的韌體,會依然使用韌體對應的v1或v2版本進行請求,就解決了相容問題。

從0到1搭嵌入式工程 對shell命令的呼叫

在linux的應用程式中,呼叫system 和popen 可以執行shell命令。system 命令是序列執行,是阻塞的,等到shell執行結束後,返回,system不能直接返回執行結果。popen 是平行的,不等執行完成,函式就會返回,繼續往下執行。popen會返回乙個檔案指標,可以對這個檔案指標...

讀嵌入式linux驅動程式設計從入門到精通1

主裝置號標誌裝置對應的驅動程式,次裝置號對應具體的裝置例項。由同乙個裝置驅動控制的所有裝置具有相同的主裝置號,從裝置號用來區分具有相同主裝置號且由相同裝置驅動控制的不同裝置。裝置位於 dev目錄,字元裝置的標誌的c,塊裝置的標誌是b。dev t型別 中定義 用來儲存裝置編號,主裝置號12位,次裝置號...

從終端到雲確保嵌入式和物聯網裝置的安全

arm預計,到2035年,連線的裝置將超過一萬億,其中每個裝置都將需要安全保護。自嵌入式系統誕生以來,關於什麼是嵌入式系統以及沒有嵌入式系統的特性一直存在爭議。早期的定義是 嵌入式系統是乙個您甚至都不知道的系統,直到它停止工作為止。這種思維方式使嵌入式系統的許多方面變得色彩斑,例如安全性。長期以來,...