3.1.2 SSL¶
作者:闫国梁 最后修改时间:2020年6月23日 ## SSL
为什么需要SSL¶
不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。 > (1) 窃听风险(eavesdropping):第三方可以获知通信内容。 > (2) 篡改风险(tampering):第三方可以修改通信内容。 > (3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。
SSL/TLS协议是为了解决这三大风险而设计的,希望达到: > (1) 所有信息都是加密传播,第三方无法窃听。 > (2) 具有校验机制,一旦被篡改,通信双方会立刻发现。 > (3) 配备身份证书,防止身份被冒充。
总而言之,SSL就是为了数据安全。 ## AT模式使用SSL ## 设置TCP 使用SSL 功能:AT+CIPSSL
命 令 类 型 |
语法 |
返回 |
---|---|---|
设 置 命 令 |
AT+CIPSSL= |
OK |
查 询 命 令 |
AT+CIPSSL? |
+CIPSSL: OK |
测 试 命 令 |
AT+CIPSSL=? |
+CIPSSL: (0-1)OK |
注 意 事 项 |
在 CIPSTART 之前输入设置命令 AT+CIPSSL=1 来打开 SSL 功能。打开 SSL 功能后,模块会在 TCP 连接建立后自动进行 SSL 验证。当前仅支持作为 SSL Client 应用。 |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
SSL 功能开关 |
0 |
关闭 SSL |
|
1 |
打开 SSL |
配置 TCP SSL 参数:AT+SSLCFG¶
设置命令用来设置 SSL 版本,SSL 加密算法(ciphersuites),安全等级(security level),CA 证书(Certificate Authority Certificate),客户端证书(client certificate)和客户端密钥(client key)。这些参数在 SSL 协议的握手过程中会用到。语法规则:
命令类型 |
语法 |
返回 |
---|---|---|
设置命令 |
AT+ SSLCFG=“sslversion”,[,] |
如果**缺失, 则查询**对应的SSL版本:+SSLCFG: “sslversion”,, OK 否则,设置** 对应的**SSL版 本:如果格式和参数正确 ,返回:OK如果命令格式 或参数错误,返回:ERROR |
AT+SSLCFG=“ ciphersuite”,[,] |
应的加密算法:+SSLCFG: c iphersuite”,,OK否则,设 置****对应的加密算 法:如果格式和参数正确 ,返回:OK如果目录格式 或参数错误,返回:ERROR |
|
AT+SSL CFG=“cacert”,[,] |
如果** 参数缺失,则查询* *对应的CA证 书路径:+SSLCFG:“cacer t”,,OK否则,设置****
径:如果格式和参数正确 ,返回:OK如果目录格式 或参数错误,返回:ERROR |
AT+SSLCFG= “ignorelocaltime”,[,] |
如果 **缺失,则是查 询**相关的证书 过期时间检查这项的设 置:+SSLCFG:“ignorel ocaltime”,,OK否则,设 置****对应的证书 过期时间检查参数:如 果格式和参数正确,返 回:OK如果命令格式或 参数错误,返回:ERROR |
|
---|---|---|
AT+SSLCFG=“ne gotiatetimeout”,[,] |
如果* *参数缺失,则是查 询**对应的最大
SSLCFG:“negotiatetime out”,,OK否则,设置* *对应的最大**SS L写上协商时间:如 果格式和参数正确,返 回:OK如果命令格式或 参数错误,返回:ERROR |
|
AT+SSLC FG=“clientrandom”,, |
**相关的随机数 :+SSLCFG:“clientran dom”,,OK否则,设置* *对应的随机数:如 果格式和参数正确,返 回:OK如果命令格式或 参数错误,返回:ERROR |
|
AT+S SLCFG=“premaster”,, |
如果**** 缺失,则是查询* *相关的**:+S SLCFG:“premaster”,,OK 否则 ,设置**对应的 **premaster:如 果格式和参数正确,返 回:OK如果命令格式或 参数错误,返回:ERROR |
|
AT+ SSLCFG=“verifymode”,, |
如果** 缺失,则查询* *相关的证书验证模式 ,此时返回:+SSLCFG:” verifymo de”,,OK否则,设置证书 认证模式是根证书认证 还是其他证书认证:如 果格式和参数正确,返 回:OK如果命令格式或 参数错误,返回:ERROR |
|
AT+SSLCFG=”XXXXX”,, |
擦 除相应的参数。”XXXXX ”是指:“sslversion”, “ciphersuite”,“cac ert”等关键字。注意: |
|
测试命令 |
AT+SSLCFG=? |
+SSLCFG: “sslv ersion”,(0-5),(0-4)+S SLCFG:“ciphersuite”,( 0-5),(0X0035,0X002F,0 X0005,0X0004,0X000A,0 X003D,0XFFFF)+SSLCFG: “c acert”,(0-5),+SSLCFG: “clien tcert”,(0-5),+SSLCFG: “clie ntkey”,(0-5),+SSLCFG: “seclevel ”,(0-5),(0-2)+SSLCFG: “ignorelocaltime ”,(0-5),(0,1)+SSLCFG: “negotiatet ime”,(0-5),(10-300)OK |
注意事项 |
TCP SSL 的功能示例,请 参考本章后面的例子。 |
参数定义:
参数 |
定义 |
取值 |
对取值的说明 |
---|---|---|---|
SSL 上下文 id |
0 ~5,3 4,88 ,153 |
整数型。TCP 功能时与 CIPSTART 中的绑定。例如:当多链接中 CIPSTART 中设置链接号为 1,则SSL 上下文 id 也为 1。TCP 单链接中 SSL 上下文 id 固定为 0.FTP 功能时=34(十进制)MQTT 功能时=88(十进制)HTTP 功能时=153(十进制) |
|
SSL 版本 |
0 |
SSL3.0 |
|
1 |
TLS1.0 |
||
2 |
TLS1.1 |
||
3 |
TLS1.12 |
||
4 |
ALL above |
||
SSL ciphersuites |
0X 0035 |
TL S_RSA_WITH_AES_256_CBC_SHA |
|
0 X002F |
TLS_RS A_WITH_AES_128_CBC_SHA |
||
0 X0005 |
TL S_RSA_WITH_RC4_128_SHA |
||
0 X0004 |
TL S_RSA_WITH_RC4_128_MD5 |
||
0 X000A |
TLS_RSA _WITH_3DES_EDE_CBC_SHA |
||
0 X003D |
TLS_RSA_W ITH_AES_256_CBC_SHA256 |
||
0 XFFFF |
ALL above |
||
被信任的 CA 证书路径 |
字符串型 |
||
客户端证书路径 |
字符串型 |
||
客户端密钥路径 |
字符串型 |
||
安全等级 |
0 |
No authentication |
|
1 |
服务器鉴权 |
||
2 |
服务器鉴权和客户端鉴权 (如果服务器要求的话) |
||
主机名 |
|||
该参 数决定如何对待过期证书 |
0 |
关心证书的过期时间 |
|
1 |
忽略证书的过期时间 |
||
SSL 协商阶段的最大时间 |
10 ~300 |
单位:秒 |
|
随机数,十六进 制数组成的字符串,支持 56 和 64 个字节 |
数字 和字 母的 组合 |
字符串型 ,双引号可加可不加,数字的 范围:0~9,字母的范围:AB CDEF(大小写不敏感)。例如 56 个字节的:101B 12C3141516171F192021222324 25262728293031323334353637 |
|
premaster |
|||
证书验证模式 |
0 |
根证书认证 |
|
1 |
其他证书认证 |
具体使用方法可见最佳实践章节。
LUAT模式¶
luat开发模式下SSL的使用表现在具体应用层的接口,主要是HTTP,MQTT和SOCKET相关部分。以SOCKET为例: socket.tcp(ssl, cert) 创建基于TCP的socket对象
参数
传入 值类型
释义
bool
可选参数,默认为 ``nil``,ssl,是否为ssl连接,true表示是,其余表示否
table
可选参数,默认为``nil``,cert,ssl连接需要的证书 配置,只有ssl参数为true时,才参数才有意义,cert格式如下: { caCert = “ca.crt”, –CA证书文件(Base64编码 X.509格式),如果存在此 参数,则表示客户端会对服务器的证书进行校验;不存在则不校验 clientCert = “client.crt”, –客户端证书文件(Base64编码 X.509格式),服务器对客户端的证书进行校验时会用到此参数 clientKey = “client.key”, –客户端私钥文件(Base64编码 X.509格式) clientPassword = “123456”, –客户端证书文件密码[可选] }
使用ssl的时候配置第一个参数为true即可,第二个参数使用非对称密钥时可以不传,模块会使用内置的正式连接,当需要使用私有证书时,将证书和私钥与脚本放在同一目录一起下载即可。可参考demo的socketssl文件夹的脚本。