SSL

作者:闫国梁 最后修改时间: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”,[,]

如果 参数缺失,则是查询 对应的客户端证书路径: +SSLCFG:“clientcert”,, OK 否则,设置 对应的客户端证书路径: 如果格式和参数正确,返回: OK 如果命令格式或参数错误,返回: ERROR

AT+SSLCFG=“clientkey”,[,]

如果 缺失,则是查询 对应的客户端密钥路径: +SSLCFG:“clientkey”,, OK 否则,设置 对应的客户端密钥路径: 如果格式和参数正确,返回: OK 如果命令格式或参数错误,返回: ERROR

AT+SSLCFG=“seclevel”,[,]

如果 参数缺失,则是查询 相关的安全等级 : +SSLCFG:“seclevel”,, OK 否则,设置 对应的安全等级: 如果格式和参数正确,返回: OK 如果命令格式或参数错误,返回: ERROR

AT+SSLCFG=“hostname”,[,]

如果 参数缺失,则是查询 相关的域名: +SSLCFG:“hostname”,, OK 否则,设置 对应的主机名: 如果格式和参数正确,返回: OK 如果命令格式或参数错误,返回: ERROR

AT+S SLCFG=“ignorelocaltime”,[,]

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

AT+SS LCFG=“negotiatetimeout”,[,]

如果 参数缺失,则是查询 对应的最大 SSL 协商时间: +SSLCFG:“negotiatetimeout”,, OK 否则,设置 对应的最大 SSL 写上协商时间: 如果格式和参数正确,返回: OK 如果命令格式或参数错误,返回: ERROR

A T+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 上下文 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

0X 002F

TL S_RSA_WITH_AES_128_CBC_SHA

0X 0005

TLS_RSA_WITH_RC4_128_SHA

0X 0004

TLS_RSA_WITH_RC4_128_MD5

0X 000A

TLS _RSA_WITH_3DES_EDE_CBC_SHA

0X 003D

TLS_R SA_WITH_AES_256_CBC_SHA256

0X FFFF

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

其他证书认证

3 AT指令示例

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

## 3.1 连接网络

@[TOC] ### 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