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 ...
随机推荐
- c# 将字符串转换为指定类型的值
private object GetValueByProperty(string key, string value, ref Type typeValue) { Type t = typeof(T) ...
- jquery中的DOM操作集锦
1,查找节点: 1 2 var $li = $("ul li:eq(1)");//查找元素 $li.attr("title"); //查找元素的属性值 2, ...
- 第五章 FISCO BCOS 区块链浏览器的部署
想了解相关区块链开发,技术提问,请加QQ群:538327407 前提 前面我们已经通过底层部署.sdk调测.自定义智能合约编写与部署.联合单元测试调测,已经初步对FISCO BCOS的区块链底层和实际 ...
- Mybatis_two
SqlMapConfig.xml配置文件 SqlMapConfig.xml中配置的内容和顺序如下: properties(属性) settings(全局配置参数) typeAliases(类型别名) ...
- 基于maven的项目脚手架,一键创建项目的项目模板
制作基于maven的项目脚手架 Springboot的出现极大的简化了项目开发的配置,然而,到真实使用的时候还是会有一堆配置需要设定.比如依赖管理,各种插件,质量扫描配置,docker配置,持续集成配 ...
- Node中的cookie的使用
1.为什么使用cookie? 因为HTTP是无状态协议.简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到,这是同一个浏览器在访问同一个网站.每一次的访问,都是没有任何关系 ...
- pycharm同步代码到linux(转)
pycharm是一个非常强大的python开发工具,现在很多代码最终在线上跑的环境都是linux,而开发环境可能还是windows下开发,这就需要经常在linux上进行调试,或者在linux对代码进行 ...
- Akka-CQRS(15)- Http标准安全解决方案:OAuth2+JWT
上期讨论过OAuth2, 是一种身份认证+资源授权使用模式.通过身份认证后发放授权凭证.用户凭授权凭证调用资源.这个凭证就是一种令牌,基本上是一段没什么意义的加密文,或者理解成密钥也可以.服务方通过这 ...
- Codeforces 755B:PolandBall and Game(map+思维)
http://codeforces.com/problemset/problem/755/B 题意:A可以喊出n个字符串,B可以喊出m个字符串,如果一个字符串之前被喊过,那么它再也不能喊了,A先喊,最 ...
- oraclesql遇见的问题(一)
在oracle的数据库,对于字段为null的字段过滤条件只能用is null 或者 is not null,不能使用 != , <> , = 判断, 今天进行接口测试时,发现获取到的数据缺 ...
