mbedTLS(前身 PolarSSL)是一個由 ARM 公司開源和維護的 SSL/TLS 算法庫。其使用 C 編程語言以最小的編碼占用空間實現了 SSL/TLS 功能及各種加密算法,易於理解、使用、集成和擴展,方便開發人員輕松地在嵌入式產品中使用 SSL/TLS 功能。
mbedTLS 軟件包提供了如下的能力:
- 完整的 SSL v3、TLS v1.0、TLS v1.1 和 TLS v1.2 協議實現
- X.509 證書處理
- 基於 TCP 的 TLS 傳輸加密
- 基於 UDP 的 DTLS(Datagram TLS)傳輸加密
- 其它加解密庫實現
軟件框架圖
工作原理
mbedTLS 建立安全通信連接需要經過以下幾個步驟:
- 初始化 SSL/TLS 上下文
- 建立 SSL/TLS 握手
- 發送、接收數據
- 交互完成,關閉連接
其中,最關鍵的步驟就是 SSL/TLS 握手 連接的建立,這里需要進行證書校驗。
SSL/TLS 握手流程
DTLS 握手流程
為了避免拒絕服務攻擊,DTLS采用和IKE一樣的無狀態 cookie 技術。當客戶端發送 client hello 消息后,服務器發送 HelloVerifyRequest 消息,這個消息包含了無狀態 cookie。客戶端收到之后必須重傳添加上了 cookie 的 clienthello。
DTLS 握手流程如下圖所示: