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.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
5 常见问题¶
连接服务器失败
服务器必须是公网地址
使用PC上的TCP UDP测试工具客户端、或者mqtt.fx,连接服务器确认一下是否可以连接成功,排除服务器故障
如果连接ssl服务器,确认下core文件是否支持ssl功能(例如2G模块的某些core文件不支持ssl功能)
2G模块不要使用中国联通卡
检查下模块信号、网络注册、网络附着、PDP激活状态
检查下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