在学习安全传输平台项目总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
10-安全传输平台项目-第05天(密钥协商服务器-密钥协商客户端)
目录:
一、复习
二、安全传输平台项目——密钥协商服务器-密钥协商客户端
1、密钥协商-物理组件集成
2、密钥协商-日志的使用
3、密钥协商客户端-模块划分
4、密钥协商客户端-框架实现
5、密钥协商客户端-Agree函数框架
6、密钥协商客户端-Agree函数实现
7、密钥协商客户端-Agree函数内存释放
8、密钥协商服务器-框架梳理
9、密钥协商服务器-业务逻辑实现
10、密钥协商服务器-Agree功能实现
11、总结
一、复习
1、线程传参
2、共享内存
二、安全传输平台项目——密钥协商服务器-密钥协商客户端
》密钥协商业务逻辑图:
1、密钥协商-物理组件集成
》创建相应的文件夹及文件准备
>mkdir secmng
>cd secmng
>mkdir inc
>mkdir lib
>mkdir src
通过远程软件,将库文件:libitcastsocket.so和libmessagereal.so拷贝到新创建的lib目录下;
把(keymnglog.c和myipc_shm.c)2个文件放入到src目录下,把(keymng_msg.h—统一报文编码解码,对应lib库libmessagereal.so、keymnglog.h—日志,对应inc的keymnglog.c、myipc_shm.h—统一共享内存,对应inc的myipc_shm.c、poolsocket.h—统一通信,对应lib库libitcastsocket.so)4个文件放入到inc目录下。
2、密钥协商-日志的使用
>cd src
>touch keymngclient.c
>touch keymngserver.c
>vi keymngclient.c
#include "keymnglog.h" int main(void) { KeyMng_Log(__FILE__, __LINE__, KeyMngLevel[0], 0, "%s", "00000000000000"); KeyMng_Log(__FILE__, __LINE__, KeyMngLevel[1], 1, "%s", "11111111111111"); KeyMng_Log(__FILE__, __LINE__, KeyMngLevel[2], 2, "%s", "22222222222222"); KeyMng_Log(__FILE__, __LINE__, KeyMngLevel[3], 3, "%s", "33333333333333"); KeyMng_Log(__FILE__, __LINE__, KeyMngLevel[4], 4, "%s", "44444444444444"); return 0; }
>gcc keymngclient.c keymnglog.c -o keymngclient -I ../inc
>./keymngclient
打开另一个终端,然后在家目录的log目录下查看日志
注意:0的时候没有日志,所以查看的时候只有4行。
3、密钥协商客户端-模块划分
》密钥协商客户端: keymngclient.c
显示菜单。
接收用户选择。 num。
客户端信息初始化。
switch(num) {
case 1协商:
密钥协商。 建立连接、封装req结构体、编码、发送、接收、解码、生成密钥、写共享内存。
_Agree();
case 2校验:
密钥校验。 建立连接、封装req结构体、编码、发送、接收、解码、生成密钥、写共享内存。
_Check();
case 查看:
密钥查看。 建立连接、封装req结构体、编码、发送、接收、解码、生成密钥、写共享内存。
_View();
。。。。
}
将结果展示给用户。
》模块划分:
业务逻辑:
keymngclient.c
业务功能:
keymngclientop.c --> keymngclientop.h
实现 客户端信息初始化。 客户端信息初始化声明。
实现 客户端密钥协商。 。。。。
实现 客户端密钥校验。
struct clientInfo { serverIp, serverPort, clientID, serverID, Autocode, shmkey, shmid, maxnode }
int keymng_Agree(struct clientInfo *pInfo)
int keymng_Check(struct clientInfo *pInfo);
int keymng_Revoke(struct clientInfo *pInfo);
====================================================================
》密钥协商服务器:
keymngserverop.c keymngserverop.h 功能实现
实现 服务器信息初始化。 服务器信息初始化声明。
实现 服务器密钥协商。 。。。。
实现 服务器密钥校验。
实现 服务器密钥注销。
4、密钥协商客户端-框架实现
》文件准备:
// keymngclientop.h #ifndef _KEYMNG_CLIENTOP_H_ #define _KEYMNG_CLIENTOP_H_ #ifdef __cplusplus extern "C" { #endif #define MngClt_OK 0 //正确 #define MngClt_ParamErr 301 //输入参数失败 #define MngClt_NoNetPointErr 302 //共享内存中,没有找到网点信息 #define MngClt_NodeMaxCount 303 //共享内存中,超过最大网点 typedef struct _MngClient_Info { char clientId[12]; //客户端编号 char AuthCode[16]; //认证码 char serverId[12]; //服务器端编号 char serverip[32]; int serverport; int maxnode; //最大网点数 客户端默认1个 int shmkey; //共享内存keyid 创建共享内存时使用 int shmhdl; //共享内存句柄 }MngClient_Info; //初始化客户端 全局变量 int MngClient_InitInfo(MngClient_Info *pCltInfo); int MngClient_Quit(MngClient_Info *pCltInfo); int MngClient_Agree(MngClient_Info *pCltInfo); int MngClient_Check(MngClient_Info *pCltInfo); int MngClient_Revoke(MngClient_Info *pCltInfo); int MngClient_view(MngClient_Info *pCltInfo); #ifdef __cplusplus } #endif #endif
将keymngclientop.h放入ins目录下,然后在src新建keymngclientop.c,进行开发
>touch keymngclientop.c
>vi keymngclientop.c
#include <stdio.h> #include <stdlib.h> #include "keymngclientop.h" int MngClient_InitInfo(MngClient_Info *pCltInfo) { strcpy(pCltInfo->clientId, "1111"); strcpy(pCltInfo->AuthCode, "1111"); strcpy(pCltInfo->serverId, "0001"); strcpy(pCltInfo->serverip, "127.0.0.1"); pCltInfo->serverport = 8001; pCltInfo->maxnode = 1; pCltInfo->shmkey = 0x0011; pCltInfo->shmhdl = 0; return 0; } int MngClient_Agree(MngClient_Info *pCltInfo) { return 0; }
5、密钥协商客户端-Agree函数框架
>keymngclient.c