SSLAT

206 阅读9分钟

作者:闫国梁 最后修改时间:2020年8月11日

关键词:SSL,加密,TLS,证书

1 概述

为什么需要SSL

不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。

(1) 窃听风险(eavesdropping):第三方可以获知通信内容。 (2) 篡改风险(tampering):第三方可以修改通信内容。 (3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。

SSL/TLS协议是为了解决这三大风险而设计的,希望达到:

(1) 所有信息都是加密传播,第三方无法窃听。 (2) 具有校验机制,一旦被篡改,通信双方会立刻发现。 (3) 配备身份证书,防止身份被冒充。

总而言之,SSL就是为了数据安全。

2 相关AT指令介绍

2.1 设置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

2.2 配置 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: ciphersuite",, OK 否则,设置 对应的加密算法: 如果格式和参数正确,返回: OK 如果目录格式或参数错误,返回: ERROR
AT+SSLCFG="cacert",[,]如果 参数缺失,则查询 对应的 CA 证书路径: +SSLCFG:"cacert",, OK 否则,设置 对应的 CA 证书路径: 如果格式和参数正确,返回: OK 如果目录格式或参数错误,返回: ERROR
AT+SSLCFG="clientcert",[,<client_cert_path>]如果 <client_cert_path> 参数缺失,则是查询 对应的客户端证书路径: +SSLCFG:"clientcert",,<client_cert_path> OK 否则,设置 对应的客户端证书路径: 如果格式和参数正确,返回: OK 如果命令格式或参数错误,返回: ERROR
AT+SSLCFG="clientkey",[,<client_key_path>]如果 <client_key_path> 缺失,则是查询 对应的客户端密钥路径: +SSLCFG:"clientkey",,<client_key_path> OK 否则,设置 对应的客户端密钥路径: 如果格式和参数正确,返回: OK 如果命令格式或参数错误,返回: ERROR
AT+SSLCFG="seclevel",[,]如果 参数缺失,则是查询 相关的安全等级 : +SSLCFG:"seclevel",, OK 否则,设置 对应的安全等级: 如果格式和参数正确,返回: OK 如果命令格式或参数错误,返回: ERROR
AT+SSLCFG="hostname",[,]如果 参数缺失,则是查询 相关的域名: +SSLCFG:"hostname",, OK 否则,设置 对应的主机名: 如果格式和参数正确,返回: OK 如果命令格式或参数错误,返回: ERROR
AT+SSLCFG="ignorelocaltime",[,]如果 缺失,则是查询 相关的证书过期时间检查这项的设置: +SSLCFG:"ignorelocaltime",, OK 否则,设置 对应的证书过期时间检查参数: 如果格式和参数正确,返回: OK 如果命令格式或参数错误,返回: ERROR
AT+SSLCFG="negotiatetimeout",[,<negotiate_time>]如果 <negotiate_time> 参数缺失,则是查询 对应的最大 SSL 协商时间: +SSLCFG:"negotiatetimeout",,<negotiate_time> OK 否则,设置 对应的最大 SSL 写上协商时间: 如果格式和参数正确,返回: OK 如果命令格式或参数错误,返回: ERROR
AT+SSLCFG="clientrandom",[,]如果 缺失,则是查询 相关的随机数 : +SSLCFG:"clientrandom",, OK 否则,设置 对应的随机数: 如果格式和参数正确,返回: OK 如果命令格式或参数错误,返回: ERROR
AT+SSLCFG="premaster",[,]如果 缺失,则是查询 相关的 : +SSLCFG:"premaster",, OK 否则,设置 对应的 premaster : 如果格式和参数正确,返回: OK 如果命令格式或参数错误,返回: ERROR
AT+SSLCFG="verifymode",[,]如果 缺失,则查询 相关的证书验证模式,此时返回: +SSLCFG:" verifymode",, OK 否则,设置证书认证模式是根证书认证还是其他证书认证: 如果格式和参数正确,返回: OK 如果命令格式或参数错误,返回: ERROR
AT+SSLCFG=”XXXXX”,,擦除相应的参数。”XXXXX”是指:"sslversion","ciphersuite","cacert"等关键字。 注意: 后一定要有逗号,如果 后面没有逗号,则只是查询。
测试命令AT+SSLCFG=?OK
注意事项TCP SSL的功能示例,请参考本章后面的例子。

参数定义:

参数定义取值对取值的说明
SSL 上下文 id0~5,34,88,153整数型。TCP 功能时与 CIPSTART 中的绑定。例如:当多链接中 CIPSTART 中设置链接号为 1,则SSL 上下文 id 也为 1。TCP 单链接中 SSL 上下文 id 固定为 0.FTP 功能时=34(十进制)MQTT 功能时=88(十进制)HTTP 功能时=153(十进制)
SSL 版本0SSL3.0
1TLS1.0
2TLS1.1
3TLS1.12
4ALL above
SSL ciphersuites0X0035TLS_RSA_WITH_AES_256_CBC_SHA
0X002FTLS_RSA_WITH_AES_128_CBC_SHA
0X0005TLS_RSA_WITH_RC4_128_SHA
0X0004TLS_RSA_WITH_RC4_128_MD5
0X000ATLS_RSA_WITH_3DES_EDE_CBC_SHA
0X003DTLS_RSA_WITH_AES_256_CBC_SHA256
0XFFFFALL above
被信任的 CA 证书路径字符串型
<client_cert_path>客户端证书路径字符串型
<client_key_path>客户端密钥路径字符串型
安全等级0No authentication
1服务器鉴权
2服务器鉴权和客户端鉴权(如果服务器要求的话)
主机名
该参数决定如何对待过期证书0关心证书的过期时间
1忽略证书的过期时间
<negotiate_time>SSL 协商阶段的最大时间10~300单位:秒
随机数,十六进制数组成的字符串,支持 56 和 64 个字节数字和字母的组合字符串型,双引号可加可不加,数字的范围:0~9,字母的范围:ABCDEF(大小写不敏感)。例如 56 个字节的:101B12C3141516171F19202122232425262728293031323334353637
premaster
证书验证模式0根证书认证
1其他证书认证

3 AT指令示例

实例说明:本实例演示模块做为客户端,单链接,发送数据,开启SSL功能(双向证书验证)

3.1 连接网络

3.1.1 开机

通过拉低powerkey2秒进行开机,开机以后通过串口循环发送AT直到收到OK,如果90秒没有收到OK请拉低 RESET_IN_N 引脚 150ms 以上。或使用其他方法见开关机章节

3.1.2 查询卡状态

**AT+CPIN?**查询卡状态,直到收到+CPIN: READY,如果10s内没有收到建议重启模块

3.1.3 查询网络注册情况

**AT+CGATT?**查询是否注册网络收到+CGATT: 1值是1即为注册成功,正常情况下注册时间不会超过两分钟,如果超过两分钟没有注册可以进入飞行模式五秒后退出再查询,或者直接重启模块。

3.1.4 配置连接

AT+CIPMUX=0设置为单链接模式

AT+CIPQSEND=1设置为快发

注意:这两条一定要在启用网络之前配置,不然会失败。

3.1.5 激活网络

AT+CSTT配置网络,非私有APN以外Cat1的固件支持根据卡自动配置APN,直接输入AT+CSTT即可,模块会按照自动获取的APN设置CSTT的APN。

AT+CIICR激活网络,在IP START的状态使用AT+CIICR激活网络,激活以后通过AT+CIFSR查询是否获取IP,如果成功就可以开始配置TCP连接了,如果不成功使用AT+CIPSHUT关闭移动网络,从AT+CSTT重新进行。

3.2 配置连接

AT+CIPSSL=1 开启SSL功能开关为开

AT+FSCREATE=”server.crt” 创建CA 证书文件

**AT+FSCREATE=”client.crt”**创建客户端证书文件

**AT+FSCREATE=”client.key”**创建客户端密钥文件

AT+FSWRITE=”server.crt”,0,2080,15文件长度2080只是举例,要根据实际填写。下同。

AT+FSWRITE=”client.crt”, 0,128,10输入客户端证书文件

AT+FSWRITE=”client.key”,0,188,10输入客户端密钥文件

**AT+SSLCFG=”cacert”,0, ”server.crt”**设置服务器CA 证书SSL 上下文id,在单链接的情况下缺省为0

**AT+SSLCFG=”clientcert”,0, ”client.crt”**设置客户端证书

**AT+SSLCFG=”clientkey”, 0,”client.key”**设置客户端KEY

AT+SSLCFG=”seclevel”,0,2设置安全等级

AT+SSLCFG=”ciphersuite”,0,0X0035设置加密套件

AT+SSLCFG=”clientrandom”,0,101B12C3141516171F19202122232425262728293031323334353637 设置随机数

3.3 连接服务器

AT+CIPSTART=TCP,tcplab.openluat.com,57513 连接服务器,请使用自己服务器测试

AT+CIPSEND=10发送数据(确定长度)

AT+CIPSHUT关闭连接

AT+CIPSSL=0关闭SSL

4 相关资料以及购买链接

《AT指令手册》

相关开发板购买链接 Air724UG开发板 Air724 开发板使用说明

5 常见问题

  • 连接服务器失败

    1. 服务器必须是公网地址
    2. 使用PC上的TCP UDP测试工具客户端、或者mqtt.fx,连接服务器确认一下是否可以连接成功,排除服务器故障
    3. 如果连接ssl服务器,确认下core文件是否支持ssl功能(例如2G模块的某些core文件不支持ssl功能)
    4. 2G模块不要使用中国联通卡
    5. 检查下模块信号、网络注册、网络附着、PDP激活状态
    6. 检查下SIM卡是否欠费【4G模块有一种欠费表现:无法注册4G网络,可以注册2G网络】
  • 最多同时支持多少个连接 AT版本最多8个连接

  • 支持什么加密证书

    支持证书配置,支持单向认证和双向认证

    支持如下六种加密套件:

    0X0035 TLS_RSA_WITH_AES_256_CBC_SHA

    0X002F TLS_RSA_WITH_AES_128_CBC_SHA

    0X0005 TLS_RSA_WITH_RC4_128_SHA

    0X0004 TLS_RSA_WITH_RC4_128_MD5

    0X000A TLS_RSA_WITH_3DES_EDE_CBC_SHA

    0X003D TLS_RSA_WITH_AES_256_CBC_SHA256