本篇文章主要是介绍客户端认证服务器的 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,0OK
AT+CIPSTART="SSL","192.168.3.129",8739
CONNECTOK
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 抓包指南。

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

  1. SSL双向认证和SSL单向认证的区别

    双向认证 SSL 协议要求服务器和用户双方都有证书.单向认证 SSL 协议不需要客户拥有CA证书,具体的过程相对于上面的步骤,只需将服务器端验证客户证书的过程去掉,以及在协商对称密码方案,对称通话密钥 ...

  2. SSL双向认证和SSL单向认证的流程和区别

    refs: SSL双向认证和SSL单向认证的区别 https://www.jianshu.com/p/fb5fe0165ef2 图解 https 单向认证和双向认证! https://cloud.te ...

  3. SSL单向认证和双向认证交互流程

     一.Http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准.HTTP协议传输的数据都是未加密的,也就是明文 ...

  4. SSL认证:单向认证与双向认证——密码学笔记(八)

    SSL协议即用到了对称加密也用到了非对称加密(公钥加密),在建立传输链路时,SSL首先对对称加密的密钥使用非对称加密,链路建立好之后,SSL对传输内容使用对称加密. 对称加密:速度高,可加密内容较大, ...

  5. 什么是SSL双向认证,与单向认证证书有什么区别?

    SSL/TLS 证书是用于用户浏览器和网站服务器之间的数据传输加密,实现互联网传输安全保护,大多数情况下指的是服务器证书.服务器证书是用于向浏览器客户端验证服务器,这种是属于单向认证的SSL证书.但是 ...

  6. 超详细的Asp.net使用SSL双向认证,一篇就够了

    传统:项目和项目之间https仅通过SSL单向认证后进行数据传输: 本文:项目和项目之间做到SSL双向认证,防止攻击者恶意破坏: 关于单向认证和双向认证的区别:https://cloud.tencen ...

  7. ssl单向tomcat配置webservice访问方法

    tomcat 配置 单向 SSL <Connector port="8443" protocol="org.apache.coyote.http11.Http11P ...

  8. 服务器双向认证 原理,什么叫SSL双向认证 SSL双向认证过程是怎样的

    我们都知道SSL认证能够分成SSL双向认证和SSL单向认证.那么,什么是SSL双向认证?SSL双向认证过程又是怎样的?小编就在接下来的内容为各位详细讲述. 什么叫SSL双向认证 SSL双向认证则是需要 ...

  9. 【ssl认证、证书】SSL双向认证java实战、keytool创建证书

    文章目录 概述 keytool示例 参考 相关文章: //-----------Java SSL begin---------------------- [ssl认证.证书]SSL双向认证和SSL单向 ...

  10. SSL证书配置(https访问接口, 单向认证和双向认证)

    拿到SSL证书后, 如何才能解锁更多玩法? 一. SpringBoots项目配置https访问接口(直接配置) SSL协议 配置步骤 1. 获取证书/ 生成证书 2. 放置证书 3. 配置项目 pro ...

最新文章

  1. android 光晕动画,Android去掉SrollView、GrdiView、RecycleView、ViewPager等可滑动控件滑动到边缘的光晕效果...
  2. php计算时间顺延3分,PHP关于strtotime函数的大坑
  3. 墨客原型系统——随笔分享APP
  4. C\C++ 获取当前路径
  5. Net需要掌握的知识
  6. JdbcTemplate 的使用
  7. 利用python暴力破解rar压缩文件密码
  8. php微信消息通知,php实现微信小程序消息通知
  9. 力扣(SQL)584. 寻找用户推荐人
  10. 8.线性回归之非线性回归
  11. html div虚线背景,聊聊css绘制虚线
  12. 总有人问我:独立站该怎么玩?3个案例,你看完就懂了
  13. 不要用PS啦,python+opencv代码给证件照换底色
  14. Mac的最新版本JDK下载失败的解决方法
  15. 时间管理-系统管理员
  16. Linux userdel 和 deluser 的区别
  17. python爬取陌生人的qq空间_Python爬取QQ空间好友说说并生成词云(超详细)
  18. python turtle绘图中角度坐标系的绝对零度方向是_python turtle绘图中角度坐标系的绝对零度方向是_程序员也有春天,母亲节用python画朵玫瑰送给妈妈......
  19. 跨时钟域同步-结绳法
  20. 小技巧,不积硅步无以至千里

热门文章

  1. X9C102PIZ数字电位器-中文
  2. TCP 协议有什么缺陷?
  3. mysql url 解析json数据_如何在MySQL中编写可以解析列中JSON数据的查...
  4. js人脸识别,tracker.js前端人脸识别框架
  5. 计算机怎么更改网络密码,该如何修改自家宽带帐号的密码?
  6. VS2005 SP1补丁下载与安装
  7. 202102 sqlplus command not found 注意切换用户
  8. Mcafee(麦咖啡)8.5i 使用设置图解
  9. 计算机操作系统(第二版)庞丽萍 杨富民 第一章 绪论课后答案
  10. Db4o数据库:快速入门