14.4.1. 概念:信任、金鑰與檔案格式¶
在執行任何指令之前,先說明三項適用於本節其他每一頁的背景知識。
14.4.1.1. 信任模型¶
一個 TLS 連線可提供三種逐級提升的保證等級:
僅加密——流量經過加密,但雙方都不證明自己的身分。容易設定(不需驗證憑證),但容易遭受中間人攻擊。僅用於本地測試。
伺服器驗證——用戶端根據一張受信任的憑證來驗證伺服器的憑證(即我們熟悉的 HTTPS 模型)。OpenMV Cam 可以擔任用戶端(驗證遠端伺服器)或伺服器(出示自己的憑證)。
雙向驗證(mTLS)——兩端都出示並驗證憑證。用於伺服器也必須確認用戶端身分的場合。
14.4.1.2. 選擇金鑰類型¶
相機的 mbedTLS 建置支援 NIST/SEC 質數曲線上的 ECDSA 以及 RSA。產生金鑰有三種實用方式;建議使用 ECDSA P-256(prime256v1):
ECDSA P-256(prime256v1)——以 256 位元金鑰提供約 128 位元的安全性。金鑰與簽章都極小,並且是支援選項中在 Cortex-M 上交握速度最快的(橢圓曲線運算遠比 RSA 私鑰運算便宜)。所有 TLS 對端都普遍支援。在嵌入式裝置上,它在安全性、速度、RAM/快閃記憶體用量與相容性之間取得最佳平衡,這也是它在此處成為預設選擇的原因。
ECDSA P-384(secp384r1)——約 192 位元的安全性。仍屬橢圓曲線,所以效率尚可,但相較於 P-256 更大且更慢,所換得的安全餘裕是一般 IoT 部署所不需要的。僅在長壽命憑證或合規要求需要時才使用。
RSA-2048——約 112 位元的安全性。普遍相容,包括非常老舊的對端,但 RSA 金鑰與憑證大得多,而且 RSA 私鑰運算(由出示憑證的一方執行)是微控制器上最慢且最耗記憶體的選項。僅在對端無法使用 ECDSA 時才使用。
備註
不支援 Ed25519 / Curve25519 金鑰。 OpenMV Cam 的 mbedTLS 建置並未啟用 EdDSA 或 Curve25519,所以 Ed25519 憑證或金鑰會載入失敗或交握失敗。請使用上述三個選項之一。
14.4.1.3. 檔案格式:使用 DER¶
OpenMV Cam 所使用的 mbedTLS 建置並未包含 PEM 解析,所以相機只能讀取 DER 形式(二進位編碼)的憑證與金鑰。大多數工具預設輸出 PEM 形式(base64 文字),所以每個要送往相機的檔案都得先轉換成 DER——本節的每個範例最後都會以該轉換步驟作結。你會需要:
一把私鑰——保密,由出示憑證的任一方使用。
一張憑證——公開的部分,在交握期間出示給另一方。
一張 CA/信任憑證——進行驗證的一方所載入、用來判斷是否信任對端的憑證。對於自簽設定而言,這就只是對端自己的憑證。