SSL协议工作在传输层与应用层协议之间,为数据通讯提供安全支持。TLS 1.0是IETF(Internet工程任务组)制定的一种新的通信协议,TLS是建立在SSL 3.0协议规范之上。
认证客户端和服务器,以确保数据收发对象的合法性;
加密数据,以确保数据包的完整;
保证数据的正确性,避免传输过程中数据被篡改。
在TLS握手阶段,客户端首先向服务端提供以下信息:
支持的协议版本,比如TLS 1.1版;
客户端生成的随机数;
客户端支持的加密方法,比如DES、3DES、AES等;
支持的压缩方法。
服务端在接收到客户端的Client Hello之后服务器的回应包含以下内容:
确定在后续通讯过程中需要使用的TLS协议版本;
一个服务器生成的随机数,稍后用于生成"对话密钥";
服务器生成的随机数;
服务器证书。
Client Key Exchange
如果服务端需要对客户端进行验证,在客户端收到服务端的Server Hello消息之后,首先需要向服务端发送客户端的证书,让服务端来验证客户端的合法性。
Certificate Verify
接着,客户端需要对服务端的证书进行检查,然后,向服务器发送下面三项信息:
一个用服务器公钥加密的随机数
编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
客户端握手完成的通知(即前面所有通讯内容的hash值)
服务端会使用协商出来的密钥,加密一段finish消息发送给客户端,客户端若能正确解析,则证明协商成功,可以正常进行后续的应用层数据收发。
在所有的握手阶段都完成之后,就可以开始传送应用数据了。
在ESP32芯片模块上建立SSL/TLS通信工程
可以参考IDF的示例工程 “https_mbedtls” “mqtt_ssl_example_test”等。
1、CA证书,TLS在验证服务器证书时需要用服务器的证书发布机构(CA)的证书(即根证书),该证书是CA给自己颁发的证书,且通过该证书为服务器颁发证书,客服端通过根证书验证服务器下发的证书。浏览器内置了根证书链,所以我们通过浏览器上网时,不需要手动添加证书。ESP32上面可以选择将SDK内置根证书链编译到程序内部,这样就能在面对大部分服务器时都能不需要指定根证书,但若要添加或者证书更新,则需要下载新的根证书捆绑包编译后,更新程序才能替换。同时也可以配置目标服务器的CA证书。
2、客户端证书与公钥,若要使用TLS双向验证,则需要服务器下发客户端证书与客户端公钥,在ESP32中若服务器要验证客户端证书,仅需将服务器为客户端生成的证书与密钥填入TLS库相应位置。
1、crt_bundle_attach与esp_crt_bundle_attach,在初始化esp_tls_cfg_t结构体的时候,若设置了crt_bundle_attach的函数为esp_crt_bundle_attach,则TLS库在校验服务器证书的时候,会从编译进代码区的CA捆包来查找并验证服务器证书,而不需要手动设置,具体参考乐鑫手册(若使用证书捆绑包,程序会大60k左右)。
esp_tls_cfg_t cfg = {
.clientcert_buf = (const unsigned char *) client_cert_pem_start,
.clientcert_bytes = sizeof(client_cert_pem_start),
.clientkey_buf = client_key_cert_pem_start,
.clientkey_bytes = sizeof(client_key_cert_pem_start),
.crt_bundle_attach = esp_crt_bundle_attach,
};
2、若要跳过服务器证书验证,通过idf.py menuconfig配置使能Component config->ESP-TLS->[*] Allow potentially insecure options->[*] Skip server ...,并且tls config结构体中去掉cert_pem证书,
3.1、服务器需要配置一个受信任的证书
3.2、客户端的证书需要客户端通过自签名CA,且给客户端生成证书与密钥
3.3、skip_common_name,可以跳过对于服务器证书的"CN"字段的验证,若使能该设置,对于服务器自签证书,可能会有帮助。
今天的分享就到这里啦,EBYTE每一天都致力于更好的助力物联化、智能化、自动化的发展,提升资源利用率,更多产品更多资料,感兴趣的小伙伴可以登录我们的太阳集团tcy8722官网进行了解,也可以直接拨打400电话咨询技术专员!
7 X 24 销售服务热线
4000-330-990深圳办事处柯经理:18218726658 杭州办事处戴经理:17512568697
常州办事处崔经理:15906110783 南京办事处葛经理:17626012283
业务邮箱:support@cdhanzaichips.com
全国销售投诉电话:19934352316
地址:四川省成都市高新西区西区大道199号B5栋(前台座机:028-61543675)
©© 成都太阳集团tcy8722电子科技有限公司【版权所有】 蜀ICP备27697263号-3