1、概述

DTLS即Datagram Transport Layer Security (RFC4347),AP加入AC前,先进行DTLS验证,当AP与AC之间的DTLS握手成功后,AP发出Join请求开始请求加入。这个过程里面的所有报文均为加密报文。以下为报文格式(摘自RFC5418):

                       

在我们的代码中是在CWWTPEnterJoin()函数中来实现的。

2、代码分析

主要的函数以下几个过程:

CWStateTransition CWWTPEnterJoin() {

//初始化socket  gWTPSocket

/* Init DTLS session */

if(!CWErr(CWNetworkInitSocketClient(&gWTPSocket,

&(gACInfoPtr->preferredAddress))) ) {

timer_rem(waitJoinTimer, NULL);

return CW_ENTER_DISCOVERY;

}

#ifndef CW_NO_DTLS

if(gACInfoPtr->security == CW_X509_CERTIFICATE) {//需要授权书

if(!CWErr(CWSecurityInitContext(&gWTPSecurityContext,//初始化wtp本地加密策略

"root.pem",

"client.pem",

"prova",

CW_TRUE,

NULL)))

}

#endif

CWThread thread_receiveFrame;

if(!CWErr(CWCreateThread(&thread_receiveFrame, //开启接受dtls数据的线程

CWWTPReceiveDtlsPacket,

(void*)gWTPSocket)))

#ifndef CW_NO_DTLS

if(!CWErr(CWSecurityInitSessionClient(gWTPSocket,//初始化DTSL会话

&(gACInfoPtr->preferredAddress),

gPacketReceiveList,

gWTPSecurityContext,

&gWTPSession,

&gWTPPathMTU)))

if(!CWErr(CWWTPSendAcknowledgedPacket(seqNum, //发起Join 会话请求。

NULL,

CWAssembleJoinRequest,

(void*)CWParseJoinResponseMessage,

(void*)CWSaveJoinResponseMessage,

&values)))

CWLog("Join Completed");

return CW_ENTER_CONFIGURE;

}

DTSL会话初始化主要在CWSecurityInitSessionClient中完成。

3DTLS 握手

根据协议介绍,DTLS 握手包含如下几个步骤:

  1. WTP首先发送一个ClientHello消息来发起握手,说明它支持的密码算法列表、压缩方法及最高协议版本和其他一些需要的消息。
  2. AC回复一个HelloVerifyReuqest 消息,client必须重传添加了cookie的ClientHello。server然后验证cookie,如果有效的话才开始进行握手。
  3. AC回应一个ServerHello消息,包含服务器选择的连接参数,源自客户端初期所提供的ClientHello,确定了这次通信所需要的算法,然后发过去自己的证书(里面包含了身份和自己的公钥)。
  4. Client在收到这个消息后会生成一个秘密消息,用SSL服务器的公钥加密后传过去,SSL服务器端用自己的私钥解密后,会话密钥协商成功,双方可以用同一份会话密钥来通信了。

而在我们的代码中,

CWDebugLog("Before HS");

CWSecurityManageSSLError(SSL_do_handshake(*sessionPtr),

*sessionPtr,

SSL_free(*sessionPtr););

CWDebugLog("After HS");

if (SSL_get_verify_result(*sessionPtr) == X509_V_OK) {

CWDebugLog("Certificate Verified");

} else {

CWDebugLog("Certificate Error (%d)",

SSL_get_verify_result(*sessionPtr));

}

总结:

DTLS 握手是通过SSL_do_handshake这个函数来实现的,而在我们上次的调试过程中发现也是这个地方出错。但是这个函数是openSSL加密库的函数,在openCawwap中没有实现。

capwap DTSL 加密分析的更多相关文章

  1. capwap协议重点分析

    一.     CAPWAP概述 CAPWAP由两个部分组成:CAPWAP协议和无线BINDING协议. (1)CAPWAP协议是一个通用的隧道协议,完成AP发现AC等基本协议功能,和具体的无线接入技术 ...

  2. 37.前台js登陆加密分析

    开篇 由于现在的登陆接口如果明文传输的话,容易被暴力破解,越来越多的网站选择了前台js加密的方式,像这样: 或者这样: 枯了,对渗透造成一定的影响 本篇文章将系统的讲述使用Python对前台js加密爆 ...

  3. 关于某 App 请求参数 sign 字段加密分析

    受害者: 6ZqG5LyX5pWw5o2u 通过 Charles 抓包发现关键信息请求均携带 sign 参数,且每次请求的值都不一样: 使用 jadx 将对应的 apk 反编译并分析,全局搜素 &qu ...

  4. JAVA中简单的MD5加密类(MD5Utils)

    MD5加密分析:   JDK API:   获取对象的API:   加密的API:   package cn.utils; import java.security.MessageDigest; im ...

  5. http协议、加密解密、web安全

    今天,就简单讲讲,我学习的知识.http协议:http协议是超文本传输协议,是用于传输超媒文档的应用层协议,同时,http协议是无状态协议,意味着,在服务器两个请求之间不会保留任何数据.虽然通常基于T ...

  6. shiro入门学习--使用MD5和salt进行加密|练气后期

    写在前面 在上一篇文章<Shiro入门学习---使用自定义Realm完成认证|练气中期>当中,我们学会了使用自定义Realm实现shiro数据源的切换,我们可以切换成从关系数据库如MySQ ...

  7. 我去!爬虫遇到JS逆向AES加密反爬,哭了

    今天准备爬取网页时,遇到『JS逆向AES加密』反爬.比如这样的: 在发送请求获取数据时,需要用到参数params和encSecKey,但是这两个参数经过JS逆向AES加密而来. 既然遇到了这个情况,那 ...

  8. 第14天dbutils与案例

    第14天dbutils与案例 第14天dbutils与案例    1 1.    1.dbutils介绍    2 2.    2.dbutils快速入门    2 3.    3.dbutils A ...

  9. SuperWebClient -一个基于CURL的.NET HTTP/HTTPS模拟神组件(2)

    今天我们讨论SuperWebClient组件使用中的几个简单主题 1: UserAgent2: Cookies3: POST登录 1:UserAgent这个是客户端标识信息,此信息是用于鉴别正在访问W ...

随机推荐

  1. PDF 补丁丁 0.5.0.2078 测试版发布:不用打字,也能加书签

    新增功能: 在书签编辑器加书签,不再需要自己输文本. 书签编辑器的阅读界面增加了识别文本字符的功能,可使用该功能在添加书签时识别文本. 右键点击文本内容,可插入书签(对于扫描版的文档,在激活识别引擎后 ...

  2. Java Bean

    Java 帝国之Java bean (上) Java 帝国之Java bean(下) Difference between DTO, VO, POJO, JavaBeans? Java bean 是个 ...

  3. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(五)

    前言 在编写代码的时候,我遇到了很多关于EntityFramework6的疑问,所以现在就提前把这些问题列出来做一下解答,以便在以后的代码编写过程中减少不必要的Bug. EntityFramework ...

  4. 浏览器主页被hao123贱贱的篡改的一种方式

    今天打开一个PDF文件(正经文件,不要想歪了),误点了一个“编辑”按钮,出来发现浏览器主页被篡改了,包括chrome和IE.通过一个网址"www.qquuu8.com"跳转到hao ...

  5. DB

    数据库(DB):1:降低存储数据的冗余度.2:更高的数据一致性.3:存储的数据可以共享.4:可以建立数据库所遵循的标准. 关系型数据库(RDBMS):基本单位就是表.一张表就是一个实体.MYSQL语句 ...

  6. GestureDetectorl监听

    package com.example.gesturedetectorinterface; /** * write by harvic * 2014-9-25 * blog.csdn.net/harv ...

  7. 一个简单的游戏开发框架(六.行为Action)

    Action是cocos2d-x中比较重要的概念,有一个庞大的类族.参见老G写的cocos2d-x学习笔记09:动作2:持续动作 除了各种包装器,剩下的主要是一些持续动作: CCMoveTo:移动到. ...

  8. The connection to adb is down, and a severe error has occured.问题解决方法小结

    遇到了几次这个问题:The connection to adb is down, and a severe error has occured. You must restart adb and Ec ...

  9. nginx rewrite

    # nginx rewrite rule #Main menu rules.rewrite ^(.*?)/index.html$ $1/index.php?r=site/index break;rew ...

  10. vi技巧合集

    VIM 技巧 match & replace match the whole word(eg: match printf but not snprintf/fprintf)You can us ...