如何用开发板实现SLL Socket功能
简介
SSL socket是物联网中较为常用的功能,经过SSL证书进行最彻底的身份认证,确保证书持有者的真实性,从而最大限度上确保链接的安全性,为你的物联网产品提供安全的保障。本文介绍如何用Air724开发板,进行单向和双向SSL认证的功能演示,详细介绍请参考SSL Soceket。
材料准备
- EVB_Air724UG_A13开发板一套,包括天线SIM卡,USB线。
- 测试地址,demo中使用的测试服务器可直接使用,也可自行搭建。
- luat开发环境:环境搭建方法
步骤
本文以resource\8910_script\script_LuaTask_V2.3.7\demo\socketSsl\shortConnection这个DEMO为例做演示。
将上述demo烧录到开发板中,运行后可在日志中看到如下图所示。
在实际使用中较为重要的是socket.tcp(ssl, cert)该接口。下面针对该接口在Demo中的使用进行简述。
--双向认证测试
if mutualAuth then
--创建一个socket ssl tcp客户端
socketClient = socket.tcp(true,{caCert="ca.crt",clientCert="client.crt",clientKey="client.key"})
--阻塞执行socket connect动作,直至成功
connectResult = socketClient:connect("36.7.87.100","4434")
该接口的第一个参数表示是否为SLL连接,是则为true其余均为否。该接口的第二个参数cert表示SSL所需的证书配置,只有当该接口第一个参数为true时有效。在上面的代码中展示的是客户端与服务端进行双向认证的配置详细描述可参照下表。
参数 | 释义 |
---|---|
caCert | 服务器证书 |
clientCert | 客户端证书 |
clientKey | 客户端秘钥 |
当只对服务器端进行验证时代码如下所示,仅传入服务器证书即可。
--单向认证测试
--创建一个socket ssl tcp客户端
socketClient = socket.tcp(true,{caCert="ca.crt"})
--阻塞执行socket connect动作,直至成功
connectResult = socketClient:connect("36.7.87.100","4433")
常见问题
- 服务器与客户端无法连接
该问题常见于服务器与客户端系统时间不一致,原因在于系统中使用了OpenSSL,证书中含有一个有效时间段,当客户端或服务器端的系统时间不在该时间段内时SSL会因证书验证失败而无法建立连接。解决方法开机联网成功后同步系统时间执行即执行ntp.timeSync()该函数。