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否则,设置****

对应的CA证书路

径:如果格式和参数正确 ,返回:OK如果目录格式 或参数错误,返回:ERROR

AT+SSLCFG= “ignorelocaltime”,[,]

如果 **缺失,则是查 询**相关的证书 过期时间检查这项的设 置:+SSLCFG:“ignorel ocaltime”,,OK否则,设 置****对应的证书 过期时间检查参数:如 果格式和参数正确,返 回:OK如果命令格式或 参数错误,返回:ERROR

AT+SSLCFG=“ne gotiatetimeout”,[,]

如果* *参数缺失,则是查 询**对应的最大

SSL协商时间:+

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文件夹的脚本。