ESP-AT SSL 单向认证指令操作以及问题分析

本篇文章主要是介绍客户端认证服务器的 AT 指令操作以及问题分析。

1 SSL 认证涉及到的指令介绍

1.1 AT+SYSFLASH 查询或读写 flash 用户分区

通过查询 ESP-AT 指南,如下:

在这里插入图片描述

  • 查询指令 AT+SYSFLASH?
  • 读写指令 AT+SYSFLASH=<operation>,<partition>,<offset>,<length>

1.2 AT+CIPSSLCCONF 查询/设置 SSL 客户端配置

通过查询 ESP-AT 指南,如下:

  • 查询指令 AT+CIPSSLCCONF?
  • 单连接读写指令 AT+CIPSSLCCONF=<auth_mode>[,<pki_number>][,<ca_number>]
  • 多连接读写指令 AT+CIPSSLCCONF=<linkID>,<auth_mode>[,<pki_number>][,<ca_number>]

在这里插入图片描述

2 客户端认证服务器 AT 指令操作步骤

2.1 生成证书 bin

在这里插入图片描述
在这里插入图片描述

具体操作可以参考 generate-pki-bin

2.2 将 CA 证书更新到 flash

指令如下:

AT+SYSFLASH=0,"client_ca",0,4096  
AT+SYSFLASH=1,"client_ca",0,1424

操作步骤参考下图,加载完证书之后,点击发送文件返回 OK ,就表示更新证书成功了。
在这里插入图片描述
在这里插入图片描述

补充说明:
1. client_ca 是自己做客户端 (AT+CIPSTART=…) 用的,用来校验服务器传过来的证书。
2. server_ca 是自己做服务器 (AT+CIPSERVER=1) 用的,用来校验连接到服务器上的客户端,传过来的证书。
3. 擦除分区的时候需要保持 4 字节对齐,写分区输入实际的大小即可,例如上面证书中 at_ca.bin 是 1.4 KB, 算下来是 1433.6 byte。

2.3 SSL 认证操作

对应操作 log 如下:

AT+CWMODE=1
OK
AT+CWJAP="iot",""
WIFI DISCONNECT
WIFI CONNECTED
WIFI GOT IP
OK
AT+CIPSNTPCFG=1,8,"cn.ntp.org.cn","ntp.sjtu.edu.cn"

OK
AT+CIPSSLCCONF=2,0,0

OK
AT+CIPSTART="SSL","192.168.3.129",8739
CONNECT

OK
CLOSED

3 常见问题以及排查方向

3.1 本地搭建的 ssl server 服务器,测试单向认证(服务器端)发现连接失败

本地服务器的配置如下:
在这里插入图片描述

UART1 端 AT 测试指令 & log 如下:

AT+CWMODE=1
OK
AT+CWJAP="iot",""
WIFI CONNECTED
WIFI GOT IP
OK
AT+CIPSSLCCONF=2,0,0  //配置单向连接
OK
AT+CIPSTART="SSL","192.168.3.129",8739
ERROR

UART0 端 log 如下:

max tx power=78,ret=0
BLUFI BLE is not connected yet
ca_len=1164
set ca ok
[0;31mE (165183) esp-tls: mbedtls_ssl_handshake returned -0x2700[0m
[0;31mE (165184) esp-tls: Failed to open new connection[0m
ssl failed
ssl create 0 socket fail

从 log 信息中可以看到 -0x2700 表示服务器端的证书验证失败了。此时的排查方向为:

  1. 先确认服务器和证书是没有问题的,从服务器端获取到 CA 证书,通过 openssl 指令验证。指令为 openssl s_client -host 192.168.3.129 -port 8739 -CAfile at_server_ca/rsa-ca.crt -verify 1
    在这里插入图片描述
    在这里插入图片描述

  2. 确认服务器没有问题后,查看操作步骤是否正确。从 log 信息中,我们可以看到并未生成新的证书 bin ,也并未加载新的证书 bin。将 CA 证书更新到 Flash 中, 指令如下:

    • AT+SYSFLASH=0,"client_ca",0,4096
    • AT+SYSFLASH=1,"client_ca",0,1424
  3. 还需要注意在认证之前加上 AT+CIPSNTPCFG=1,8,"cn.ntp.org.cn","ntp.sjtu.edu.cn" 这条指令,因为SSL 认证连接需要校验服务器端的证书,所以需要连接 sntp 来获取当前时间,用来判断证书是否过期

  4. 如果以上步骤均正确, ssl 连接依然失败,就需要通过抓包进一步查看了。可参考 Wireshark 抓包指南

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值