2-1. 基于OpenSSL的传输子系统实现
一. 基本传输子系统程序设计
客户端可上传文件至服务器,或下载服务器上的文件
系统程序构架:
| 客户端 | 服务器 |
|
TCP建立连接 menu()-> 上传命令、下载命令 close(socket) |
TCP建立连接 handle()-> 根据命令响应 close(socket); |
主函数框架:
| 客户端 | 服务器 |
int main(int argc, char *args[]) int clink() |
int main() |
---------------------------------------------------------------------------------------
客户端操作菜单及服务器端命令响应:
| 客户端操作菜单 | 服务器端命令响应 |
void menu() |
按照客户端的合适进行设定 |
//case "1" 上传文件 5部曲 |
-------------------------------------------------------------------------------------------------------------------
二. OpenSSL加密系统
由于网络传输数据中,易被抓包软件截获。因此运用非对称加密方法(公钥、私钥、数字证书),文件内容+公钥 ->加密系统 ->私钥,方可解密文件。
a)公钥与私钥是配对时候用的;
b)私钥加密的文件同样用对应的公钥解密,而为了区分公钥(防止公钥被偷换,导致私密文件泄露),引入数字证书再加密。
c)数字证书有权威机构发放,包含公钥及持有人信息,无法丢失假冒;
![]() |
SSL协议处于应用层协议(HTTP/SMTP)与TCP/IP协议之间,可实现文件加密传输。开源套接字层密码库OpenSSL,包含SSL、密码算法、秘钥证书管理功能等。 |
-----------------------------------------------------------------------------------------------
移植OpenSSL库:
解压安装文件 -> 配置.config文件,修改交叉工具链arm-linux- -> 编译make,make install,即生成OpenSSL的库函数文件 .a、.so -> 置于/rootfs/lib/目录下,OK!
OpenSSL通讯模型:基于下列通讯模型优化原始传输子系统程序设计
| 客户端SSL模型 | 服务器端SSL模型 |
|
初始化SSL -> (创建套接字、连接服务器) -> 创建SSL -> 基于SSL收发数据 -> 关闭SSL -> (关闭套接字) |
初始化SSL -> 公钥私钥数字证书设置 -> (创建套接字、绑定、等待连接) -> 创建SSL -> 基于SSL收发数据 -> 关闭SSL -> (关闭套接字) |
基于SSL收发数据:将write (sockfd,~) ->SSL_write (ssl,~)、read (sockfd,~) ->SSL_read (ssl,~)即可!
再对应产生公钥、私钥:(全部置于服务器目录下)
# openssl genrsa -out privkey.pem 2048 ->私钥
# openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095 ->对应产生的公钥
OpenSSL加密传输子系统程序设计完成,对应产生服务器加密所需的公钥与私钥,分别进行编译即可实现:对上传、下载服务器文件的加密传输。
2-1. 基于OpenSSL的传输子系统实现的更多相关文章
- 基于视频压缩的实时监控系统-sprint3采集端传输子系统设计
由于jpg本来就是编码压缩后的格式,所有无需重复编码 传输子系统步骤:(1)初始化:a.socket(初始化tcp连接):b.将事件添加到epoll中 (2)事件处理:接收到网络包.发送完网络包 st ...
- 网络安全传输系统-sprint1传输子系统
一.产品规划与设计 二.传输子系统 基本框架:(1)不带安全功能的传输系统 (2)安全加密功能 part1:基本传输子程序设计(不带安全加密功能) 客户端 服务器 int main(int argc, ...
- 基于OpenSSL自建CA和颁发SSL证书
关于SSL/TLS介绍见文章 SSL/TLS原理详解.关于证书授权中心CA以及数字证书等概念,请移步 OpenSSL 与 SSL 数字证书概念贴 . openssl是一个开源程序的套件.这个套件有三个 ...
- 基于OpenSSL的PKI的PKI数字证书系统实现
本篇主要介绍了基于OpenSSL的PKI的PKI数字证书系统实现,利用OpenSSL建立一个CA中心的详细解决方案和建立的具体步骤. 1.PKI数字证书系统设计 PKI数字证书系统主要包括证书颁发机构 ...
- 基于RMI服务传输大文件的完整解决方案
基于RMI服务传输大文件,分为上传和下载两种操作,需要注意的技术点主要有三方面,第一,RMI服务中传输的数据必须是可序列化的.第二,在传输大文件的过程中应该有进度提醒机制,对于大文件传输来说,这点很重 ...
- Linux下c基于openssl生成MD5的函数
Linux下openssl提供了一系列哈希及加密的函数,如果调用openssl提供的MD5函数生成任意字符串的MD5呢?下面提供了一段代码实现Linux下c字符串生成md5的函数. 具体代码: 1 2 ...
- 基于OpenSSL的HTTPS通信C++实现
HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL.Nebula是一个为开发者提供一个快速开发 ...
- 基于OpenSSL的RSA加密应用(非算法)
基于OpenSSL的RSA加密应用(非算法) iOS开发中的小伙伴应该是经常用der和p12进行加密解密,而且在通常加密不止一种加密算法,还可以加点儿盐吧~本文章主要阐述的是在iOS中基于openSL ...
- Dealing with a Stream-based Transport 处理一个基于流的传输 粘包 即使关闭nagle算法,也不能解决粘包问题
即使关闭nagle算法,也不能解决粘包问题 https://waylau.com/netty-4-user-guide/Getting%20Started/Dealing%20with%20a%20S ...
随机推荐
- GO :互联网时代的 C 语言!
摘要: 每周为您推送最有价值的开源技术内参! 技术干货 标签:独家译文 1.Go 很好,为什么我们不使用它? 在这篇文章中,我将分享一下为什么我认为它很棒,使用它的一些缺点,以及为什么它还不是我们 Z ...
- 关于Qt 5-MSVC 2015 64位在 win7 64位系统debug程序崩溃的问题
关于Qt 5-MSVC 2015 64位在 win7 64位系统debug程序崩溃的问题 在win7 64位系统安装VC2015的编译器,并安装了 Qt 5.6 -5.7 VC2015 64位版本测 ...
- 如何开发优质的 Flutter App:应用架构的搭建
各位读者朋友们,好久不见了! 最近博主一直在忙于工作以及写<Flutter入门与应用实战>的书,所以没有时间打理博客.今天来给大家分享一个博主在GitChat上发起的一场Chat. 下面是 ...
- Dynamics 365 Document Management
Dynamics CRM中的Document Management功能需要Dynamics CRM与SharePoint进行集成,也就是实现在CRM中上传Document,实际上Document最终存 ...
- fis3前端工程构建配置入门教程
一.前言 fis3是百度推出的一款前端工程构建工具,类似的还有webpack,gulp等工具:无论大家有没有使用过,从事前端行业应该都略知一二了,所以对于此类工具用干嘛的我这里就不做重复了. 其实对于 ...
- JUnit-4.13使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误
今天重新复习spring的时候,调用Junit架包来进行测试,进入其官网 https://junit.org/junit5/,点击右上角的Junit4进行查看 2.出现了的页面是这个样子 我把这个页 ...
- 获取当前时间的MySql时间函数
mysql> select current_timestamp(); +---------------------+ | current_timestamp() | +------------- ...
- linux命令积累
lsof -i: //根据端口号查相关信息 //杀进程 ps -ef|grep appName //根据进程名称查找相关信息 grep -r "关键词" 目录 //在制定目录下根据 ...
- visual studio code emmet 插件不提示?解决方案
使用visual studio code编辑.vue文件时,emmet插件无法使用, 可以通过以下方试解决: code →首选项 →设置 ,在右侧窗口“用户配置”.“工作区设置”添加以下代码: // ...
- Java连接MYSQL进行操作(增,删,改)
连接数据库,并用表格输出数据 创建insex.jsp <table border="1" width="80%" align='center'> & ...
