初识OpenSSL
首先来认识一下SSL和TLS
SSL:Secure Sockets Layer 安全套接层协议 由Netscape公司在1994年发布;
TLS:Transport Layer Security 传输层安全协议 由IETF在1999年发布 与SSL基本上兼容;
SSL会话三部曲:
客户端向服务器端索要并验证证书;
双方协商生成“会话密钥”;
双方采用“会话密钥”进行加密通信;
第一阶段:ClientHello
客户端支持的协议版本、加密算法、压缩算法等
并生成一个随机数,用于之后生成的“会话密钥”
第二阶段:ServerHello
确认使用的协议版本、加密算法等,也生成一个随机数,用于之后生成的“会话密钥”,
并向客户端发送服务器证书;
第三阶段:
客户端验证服务器证书(发证机构,证书完整性,证书持有者,证书有效期,吊销列表等),在确认无误后取出其公钥;
发送以下信息至服务器:
一个随机数,
编码变更通知,
客户端握手结束通知;
第四阶段:
收到客户端发来的随机数,计算生成本次会话用到的“会话密钥”;
发送以下信息至客户端:
编码变更通知,
服务器握手结束通知;

如图阐述手动在用户A和用户B之间进行加密通信的简单原理。
第一步:用户A,B都是CA的信任用户,他们事先需协商好进行加密通信所需要的加密算法等等,并相互认证各自的身份。
第二步:用户B将需要发送的数据(元数据)进行单向加密,并用自己的私钥对数据特征码进行加密(也就是数字签名)。
第三步:用户B将元数据和数字签名用一个一次性的密钥进行对称加密,并用A的公钥加密这段对称加密密钥,然后将其一起发送给用户A。
第四步:用户A接收到数据后,先用自己的私钥解密对称加密,得到数字签名和元数据;再用B的公钥解密数字签名,如果能解开,说明数据是B发来的(验证B的身份);
然后再用单向加密加密元数据,将特征码与解密后的数字签名对比,如果相同,则证明数据没有被篡改(保证了数据的完整性)。
初识OpenSSL的更多相关文章
- openssl RSA加密方法初识
作为非对称加密算法,有两对密钥 一般用法 加密结果=RSA_EN(数据,公钥); 解密结果=RSA_DE(数据,私钥); RSA填充 (RSA_public_encrypt和RSA_private_d ...
- 初识HTTP协议
本篇文章从概念上初识HTTP协议,参考链接:http://www.runoob.com/http/http-tutorial.html 目录: 一.HTTP协议 HTTP 工作原理 HTT ...
- 初识Nginx及编译安装Nginx
初识Nginx及编译安装Nginx 环境说明: 系统版本 CentOS 6.9 x86_64 软件版本 nginx-1.12.2 1.什么是Nginx? 如果你听说或使用过Apache软件 ...
- RSA非对称加密,使用OpenSSL生成证书,iOS加密,java解密
最近换了一份工作,工作了大概一个多月了吧.差不多得有两个月没有更新博客了吧.在新公司自己写了一个iOS的比较通用的可以架构一个中型应用的不算是框架的一个结构,并已经投入使用.哈哈 说说文章标题的相关的 ...
- 显示本地openssl支持的加密算法
参考页面: http://www.yuanjiaocheng.net/webapi/parameter-binding.html http://www.yuanjiaocheng.net/webapi ...
- 在春意盎然的季节里初识GIT
Git 与 SVN 区别 GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等. 如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征. ...
- 非阻塞/异步(epoll) openssl
前段时间在自己的异步网络框架handy中添加openssl的支持,当时在网络上搜索了半天也没有找到很好的例子,后来自己慢慢的摸索,耗费不少时间,终于搞定.因此把相关的资料整理一下,并给出简单的例子,让 ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
随机推荐
- js 删除数组中指定值
var arr = ['1','2'];delete('1'); function delete(i){ var index = arr.indexOf(i); arr.splice(index, 1 ...
- 关于Button控件的CommandName属性用法的一个实例
注:本文分享于悠闲的博客,地址:http://www.cnblogs.com/9999/archive/2009/11/24/1609234.html 1.前台的代码 <%@ Page Lang ...
- [模拟退火][UVA10228] A Star not a Tree?
好的,在h^ovny的安利下做了此题 模拟退火中的大水题,想当年联赛的时候都差点打了退火,正解貌似是三分套三分,我记得上一道三分套三分的题我就是退火水过去的... 貌似B班在讲退火这个大玄学... 这 ...
- 关于join的一些补充
1, 为什么join是string的method而不是list的method http://effbot.org/pyfaq/why-is-join-a-string-method-instead-o ...
- 「题解」:[POJ2942]Knights of the Round Table
问题 E: Knights of the Round Table 时间限制: 1 Sec 内存限制: 256 MB 题面 题目描述 作为一名骑士是一个非常有吸引力的职业:寻找圣杯,拯救遇难的少女,与 ...
- sulin Python3.6爬虫+Djiago2.0+Mysql --实例demo
1.切换到项目目录下,启动测试服务器 manage.py runserver 192.168.0.108:8888 2.设置相关配置 项目目录展示如下: beauty=>settings.py ...
- SQLite C++ Wrapper 是一个 C++ 语言对 SQLite 的最小封装包。
SQLite C++ Wrapper 是一个 C++ 语言对 SQLite 的最小封装包. 示例代码1: #include <string> #include <iostream ...
- 《DSP using MATLAB》Problem 8.18
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- java笔试之数字颠倒
描述: 输入一个整数,将这个整数以字符串的形式逆序输出 程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001 package test; import java.ut ...
- 使用 MongoDB shell访问MongoDB