HTTPS 学习
问题
- 数字签名的作用是什么?
- 为什么 HTTPS 是安全的
- CA存在的动机是什么
- 客户端的公钥的都是一致的吗?
概述
这一节我们将要讲HTTPS,为什么说HTTPS是安全的,而HTTP是不安全的呢,这其中的原理是如何保护数据安全的。
场景一
假如服务端和客户端使用的是对称加密我们来看一下会出现什么情况?

这样子有个问题黑客E利用假装是正常用户与服务端通信,获取到密钥,然后在中途截取到其他客户端和服务端的通信(例如 A 和 B 之间的通信)那么就可能获取到他们之间的信息。 所以这种模式是不安全的。要是有一种方式可以让客户端和服务端之间的通信密钥是他们自身独有就好了,这样即使黑客拿到消息后也无法解析出来。
场景二
假如服务端和客户端使用的是非对称加密的方式,假设如今客户端已经安全地获取到了服务端的公钥,客户端用公钥加密消息给服务端,黑客E 拿到消息后发现自己没有私钥于是没办法解开消息,这是没问题的。服务端收到消息后,用私钥加密消息,发给客户端,当中途给黑客E 截取了,由于服务端的公钥的公开的,黑客E 同样可以利用公钥解开服务端给客户端的消息。
场景三
我们暂时不考虑消息传输过程是否安全,假设是安全的,我们先考虑消息的完整性,即传输过程中是否给人修改过。 这就是数字证书和数据摘要的运用了。
先说数字证书

hash对于学java的应该比较熟悉,这东西可以用来作用唯一标识。一旦内容改变了一点hash值就会不同。


然后经过私钥加密生成数字摘要,然后附在内容底下发给客户端。

当客户端收到消息解密后再对消息进行hash,对比发来的消息的hash值是否一致,不一致说明消息被人修改了。
场景四
假如服务端发送给客户端过程中公钥G给人篡改了呢?黑客E拿到公钥G后,生成一个私钥PRH和公钥PUG,发了个假的公钥给客户端,然后客户端利用这个假公钥发送消息给黑客E(又被截取了),此时黑客E可以利用手头的PRH 就可以解开又 PUG 加密的消息,然后在利用G加密消息发送给服务端。这样黑客E就充当两者之间的窃听者,可以窃取和修改两者之间的消息。所以公钥能否安全地送到客户端手上成了关键,于是就引入了第三方
就像我们平时,要证明一个人的身份,派出所成了最好的证明场所,前提是那个人要提前在派出所有记录,HTTPS 也是同样的道理,于是有了CA机构。
HTTPS
为了使公钥可以安全地发送到客户端的手上,HTTPS引入了第三方验证机构,在最初的时候服务端首先会把自己的公钥发给CA , CA用自己的私钥对服务端的公钥还有其他信息进行加密,然后生成数字证书,发送给服务端。

然后证明发给客户端,客户端如果是使用浏览器,浏览器本身会配置信任的CA机构,浏览器首先会去CA机构拿到CA的公钥,然后利用CA的公钥解开经过CA加密的服务端公钥,当然这个地方还有验证一下信息,包括证书是否过期等等。当确定该证书确实来自于服务端,且没被修改过后。
客户端生成一个用于对称加密的密钥,并用服务端给的公钥进行加密,发送给服务端,服务端收到该秘钥就利用该秘钥加密信息发给客户端,之后它们的消息都是通过该秘钥进行互相发送消息。
补充
非对称加密通俗解释
用不同的钥匙加密解密,公钥可以公开,私钥需要不能公开,需要安全保存
RSA 公钥和私钥的特性
- 私钥公钥成对出现
- 私钥公钥都可以进行加密和解密
- 用公钥加密的数据只能用对应的私钥解密,而用私钥加密的数据只能用对应的公钥才可以解密。
公钥和私钥都可以用来加密和解密,但是用途不同 :
- 私钥用于签名,公钥用于验证签名,对应着数字签名
- 公钥用于加密,私钥用于加密
数字签名
保证信息没有被人篡改。简单来说,签名主要包含两个过程:摘要和非对称加密,首先对需要签名的数据做摘要(类似于常见的 MD5)后得到摘要结果,然后通过签名者的私钥对摘要结果进行非对称加密即可得到签名结果。
CA是什么,为了解决什么问题
解决公钥分发问题的一个独立的权威的第三方机构。为了验证收到的公钥是否是真实有效的。
总结
由此可以知道HTTP开始是使用了非对称加密,当公钥被安全地送到客户端手上的时候,客户端发送对称加密的秘钥,两者之间开始对称加密。
参考资料
- https://www.jianshu.com/p/80aa37311151 (推荐阅读)
- https://www.cnblogs.com/007sx/p/10987906.html(推荐阅读)
- https://blog.51cto.com/11883699/2160032(推荐阅读,原理加实战)
- https://www.zhihu.com/question/37935203
- https://zhuanlan.zhihu.com/p/22142170
HTTPS 学习的更多相关文章
- HTTPS学习总结
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 21.0px Verdana; color: #393939 } span.s1 { } HTTPS学习总结 ...
- https学习笔记三----OpenSSL生成root CA及签发证书
在https学习笔记二,已经弄清了数字证书的概念,组成和在https连接过程中,客户端是如何验证服务器端的证书的.这一章,主要介绍下如何使用openssl库来创建key file,以及生成root C ...
- https学习笔记二----基础密码学知识和python pycrypto库的介绍使用
在更详细的学习HTTPS之前,我也觉得很有必要学习下HTTPS经常用到的加密编码技术的背景知识.密码学是对报文进行编解码的机制和技巧.可以用来加密数据,比如数据加密常用的AES/ECB/PKCS5Pa ...
- HTTPS学习笔记一----HTTPS的基础理论知识
首先推荐一本书,<HTTP权威指南>我就是看这本书入门的,对http协议有了更好的理解,学习https的理论知识我认为需要了解以下几点,需要一步步的深入学习: 1.HTTPS的基本概念? ...
- https 学习笔记
参考 : http://www.cnblogs.com/JimmyZhang/archive/2008/10/02/Cryptograph.html https://blog.csdn.net/Jog ...
- HTTPS学习(二):原理与实践
div.example { background-color: rgba(229, 236, 243, 1); color: rgba(0, 0, 0, 1); padding: 0.5em; mar ...
- HTTPS学习(一):准备知识
div.example { background-color: rgba(229, 236, 243, 1); color: rgba(0, 0, 0, 1); padding: 0.5em; mar ...
- HTTP/HTTPS 学习笔记
超文本传输协议(HyperText Transfer Protocol) 伴随着计算机网络和浏览器的诞生,HTTP1.0也随之而来,处于计算机网络中的应用层,HTTP是建立在TCP协议之上的. HTT ...
- https 学习总结
最近看了点https 做下总结 面的博客如果没有错误的话,理解起来绝对是醍醐灌顶!让人信服,如果我的理解有问题,请及时指正! 参考博客: http://www.ruanyifeng.com/b ...
- 《图解http协议》之HTTPs学习笔记
对于IP协议,并不陌生.TP协议是TCP/IP协议簇中的核心协议,也是TCP/IP的载体.所有的TCP,UDP,ICMP及IGMP数据都以IP数据报格式传输.IP提供不可靠的,无连接的数据传送服务.I ...
随机推荐
- [luogu3950] 部落冲突 - Link Cut Tree
有了LCT这不就是思博题了吗 #include <bits/stdc++.h> using namespace std; const int N = 1000000; int n,m,t1 ...
- C语言-条件编译使用分析
1.基本概念 条件编译的行为类似于C语言中的if…else… 条件编译是预编译指示命令,用于控制是否编译某段代码 2.实例分析 条件编译初探 22-1.c #include <stdio ...
- Java基本语法--关键字&标识符
本篇博客主要介绍了Java基本语法中的关键字.保留字和标识符. 关键字与保留字 关键字(keyword的定义及特点) ✄ 定义:被Java 语言赋予了特殊含义,用做专门用途的字符串 ✄ 特点:关键字中 ...
- 前端必备 Nginx 配置
Nginx (engine x) 是一个轻量级高性能的HTTP和反向代理服务器,同时也是一个通用 代理服务器 (TCP/UDP/IMAP/POP3/SMTP),最初由俄罗斯人Igor Sysoev编写 ...
- MSSQL 打开xp_cmdshell
sp_configure reconfigure go sp_configure reconfigure go
- 极客工具,PDF合并工具
前言 这两天一番花两天的时间,重新用python和python图形化开发工具tkinter,完善了下PDF合并小工具,终于可以发布了. 工具目前基本功能已经完善,后期如果有反馈可以修复部分bug或完善 ...
- 【算法学习记录-排序题】【PAT A1012】The Best Rank
To evaluate the performance of our first year CS majored students, we consider their grades of three ...
- C++-HDU2196-Computer-[树的直径]
直径定义:树上的最长路径,不妨设端点分别为s,t 可以证明(感觉):每个点到其最远点必定为s or t,反之亦然 首先,第一次dfs找到s 然后,第二次dfs以s为根找到t 最后,第三次dfs以t为根 ...
- Codeforces Round #598 (Div. 3) B Minimize the Permutation
B. Minimize the Permutation You are given a permutation of length nn. Recall that the permutation is ...
- 自动化脚本-配置LVS(DR模式)
一,获取所需配置的主机IP cat get_ip.sh #!/bin/bash #将获得到的IP地址写进IP.txt >ip.txt #将原有的hosts信息清除 >/root/.ssh/ ...