https的秘钥公钥以及之间的会话流程
一 共享秘钥
1.1 概念
共享秘钥和我们生活中同一把锁的钥匙概念类似,对同一把锁来说,加锁时使用什么钥匙,解锁也必须使用同样的钥匙。
1.2 共享秘钥在HTTP传输中的缺点
以共享密钥方式加密时必须将密钥也发给对方。在互联网上转发密钥时,如果通信被监听,那么密钥就可会落入攻击者之手,同时也就失去了加密的意义。另外还得设法安全地保管接收到的密钥。
二 SSL(Secure Socket Layer)公开秘钥加密
2.1 概念
公开密钥加密使用一对非对称的密钥。一把叫做私有密钥(private key),另一把叫做公开密钥(public key)。顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。
发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。
另外,要想根据密文和公开密钥,恢复到信息原文是异常困难。
三 HTTPS的加密机制—混合秘钥(公开秘钥加密技术和共享秘钥加密技术结合)
3.1 原因
HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密机制。公开密钥加密很安全。但是公开密钥加密与共享密钥加密相比,其处理速度要慢。
所以应充分利用共享密钥加密和公开密钥加密各自的优势,将共享密钥加密和公开密钥加密组合起来用于通信。在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。
四 公钥加密的问题
无法证明公开密钥本身就是货真价实的公开密钥。比如,正准备和某台服务器建立公开密钥加密方式下的通信时,无法证明收到的公开密钥就是原本服务器发行的公开密钥。或许在公开密钥传输途中,真正的公开密钥已经被攻击者替换掉了。
解决办法:
1.公钥与私钥原理
1)鲍勃有两把钥匙,一把是公钥,另一把是私钥
2)鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。
3)苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。
4)鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。
5)鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。
6)然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。
7)鲍勃将这个签名,附在信件下面,一起发给苏珊。
8)苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。
9)苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。
10)复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。
11)后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。
12)鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。
13)苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。
五 证书的基本原理
1 首先,客户端向服务器发出加密请求
2 服务器将自己的证书发送给请求的客户端,这个证书中包含服务器的公钥,而这个证书本身被颁发证书的可信机构的私钥加密。并且可信机构的公钥一般会存储于请求的客户端电脑上。
3 请求的客户端利用存储于本电脑上的可信机构的公钥,来验证该证书是否正确,这样就验证了服务器身份,同时得到了服务器的公钥
4 客户端利用服务器的公钥加密共享秘钥,服务器收到客户端的共享秘钥后,二者就可以通过共享秘钥完成接下来的加密通信
二、HTTPS的三次握手如何实现
1、首先客户端向服务端发起请求(TCP三次握手)
2、服务端将ca证书返还给客户端,包括公匙,颁发机构,有效期等。。。(认证机构的公匙是提前内置在浏览器中的)
3、客户端通过内置的机构公匙去验证CA证书的合法性。
4、生成随机的对称密匙。
5、客户端将生成的随机密匙通过证书的公匙加密,然后发送给服务器。
6、双方通过客户端生成的随机密匙进行http通信。
参考:https://www.cnblogs.com/shijingjing07/p/5965792.html
参考:http://www.youdzone.com/signature.html
参考: https://blog.csdn.net/u013241673/article/details/79582872
本文内容来自网上,自己做了整理,希望能对大家有帮助
https的秘钥公钥以及之间的会话流程的更多相关文章
- HTTPS 之共享秘钥 公钥 及 私钥
HTTPS 之共享秘钥 公钥 及 私钥一 共享秘钥1.1 概念共享秘钥和我们生活中同一把锁的钥匙概念类似,对同一把锁来说,加锁时使用什么钥匙,解锁也必须使用同样的钥匙. 1.2 共享秘钥在HTTP传输 ...
- Https之秘钥交换过程分析
一.概念回顾 A <------M------> B场景:A.B两个人之间通讯,A传输信息M给B,假定是在不安全的通路上传输. 1.明文传输 被中间人C拦截下来,可以随意篡改A发送给B的消 ...
- https 生成秘钥
#生成一个RSA秘钥 openssl genrsa -des3 -out a_com.key 1024 #生成一个证书请求openssl req -new -key a_com.key -out a_ ...
- JavaWeb学习总结(三)——Tomcat服务器学习和使用(二) 包含https 非对称秘钥 NB
JavaWeb学习总结(三)--Tomcat服务器学习和使用(二) 一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命 ...
- 非对称加密 秘钥登录 https
非对称加密简介: 对称加密算法在加密和解密时使用的是同一个秘钥:而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)私有密钥(private key,简 ...
- git配置ssh秘钥(公钥以及私钥)
桌面版git, 本文以github为例,gitlab等其它托管平台一样操作 当我们将代码托管到远程平台(GitHub.gitlab等)时, 我们需要在本地使用git进行push/pull代码时,需要 ...
- git乌龟http/https以及ssh clone的秘钥配置永久免密码登录设置
1.安装 安装Git 安装TortoiseGit 乌龟客户端 首先下载安装一个git客户端这个就不多说了基本就是next一直到底 安装后首次新建一个项目project在git服务器上 2.配置 1.注 ...
- Linux之间配置免秘钥访问
环境说明 [root@localhost1 ~]# cat /etc/redhat-release CentOS release 6.5 (Final) [root@localhost1 ~]# un ...
- 【转】iOS安全之RSA加密/生成公钥、秘钥 pem文件
在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于 ...
随机推荐
- Code Index: 基于Lucene.Net的代码检索工具
目录 用途 Github地址 示例 特性 用途 维护一个拥有巨大代码量的项目, 依靠自带的代码搜索工具搜索速度缓慢, 一个快速的代码检索工具就显得极为必要, 所以自己撸了个小工具. Github地址 ...
- Nginx 入门及基本命令行操作
Nginx 介绍 Nginx 是一个高性能的 Web 服务器,从 2001 年发展至今,由于 Nginx 对硬件和操作系统内核特性的深度挖掘,使得在保持高并发的同时还能够保持高吞吐量.Nginx 还采 ...
- Shell中的参数传递
原文链接 我们先来定义一个方法 function methodName() { paramName1=$1 paramName2=$2 paramName3=$3 # 依此类推,参数是从1开始标号,而 ...
- django 之 Ajax and so on
MTV与MVC(了解)
- Mysql常用sql语句(一)- 操作数据库
21篇测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html ...
- ShedLock-jdbc配置锁
项目初期为了快速响应业务开发,对于部分业务需要使用到定时任务功能模块,会直接嵌入到主流程代码中间.当业务增加,发展成分布式服务时,那些定时任务对整体而言重复执行.如果避免分布式服务中的定时任务单一执行 ...
- 改变Dataframe的列的数据类型
1.查看DataFrame的数据类型 df.dtypes#查看各列数据类型 df[A].dtypes#查看A列数据类型 2.转换DataFrame的数据类型 df[A].astypes(int)#将A ...
- Redis在linux环境下的安装
下载Redis安装包 wget http://download.redis.io/releases/redis-3.2.9.tar.gz 解压Redis安装包 tar -zxvf redis-3.2. ...
- [算法]移除指定元素&strSr()的实现
移除指定元素 题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原 ...
- Java 程序该怎么优化?(技巧篇)
搬砖者:为什么程序总是那么慢?它现在到底在干什么?时间都花到哪里去了? 面试官:简单谈谈 Java 程序性能优化? 1. 字符串处理优化,乃优化之源. 研发过程中,String 的 API 用的应该是 ...