现在网站已经普及https协议,作为开发者,我们知道如何通过代码和操作实现
也有很多学员停在了按照操作手册实现,而对它理解的不够深入,特录制视频和写下这篇科普文,系统通过视频讲解让大家对https大致机制有理解
当然,内部还涉及到证书链等相关知识,我们后面再单独录制视频讲解
讲解视频如下:https://www.bilibili.com/video/BV1Sg411A79a
1.网络传输的安全性
-
http 协议:不安全,未加密
-
https 协议:安全,对请求报文和响应报文做加密
2.对称加密与非对称加密
2.1 对称加密
-
特点:
加解密使用 相同 秘钥 高效,适用于大量数据的加密场景 算法公开,安全性取决于秘钥大小,但秘钥越大效率越低,需要权衡在安全和效率中做权衡
-
缺点:
算法本身安全,但使用场景不够安全,因为解密和加密都是同一个秘钥
image.png
2.2 非对称加密
-
使用 匹配的一对密钥 来
分别
进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥) -
注意:公钥加密的数据 只能 用 对应的私钥解密,同理,私钥加密的数据 只能用 对应的公钥解密
-
算法:RSA、ECC、Elgamal、背包算法、Rabin、D-H 等
-
特点:安全性高
-
缺点:加解密复杂,效率低,耗时较长
-
用法概要:
-
加密:对数据做加密
-
签名:证明数据是谁发的
-
2.3 非对称加密用法
-
准备工作:
1.生成一对匹配的 私钥 和 公钥 (ps:公钥其实是根据私钥生成的)
2.将公钥公布给外界
2.3.1 公钥加密
-
场景: 用来针对互联网上加密数据传递
Linda 用
James的公钥
对数据进行加密,然后发给 James,James用自己的私钥解密
因为一个公钥加密的数据 只有 对应的 私钥才能解密,所以密文很安全
补充:如果要在网络上相互发送密文,可以让对方也发对方的公钥过来,用对方的公钥来加密
2.3.2 私钥签名
-
场景:目的是为了将明文公布给别人,同时证明是自己发的;可以防止明文被篡改。
第一步:James 用
James的私钥
对明文的hash值进行加密,把密文(签名)和明文一起发给 Linda
第二步:Linda 用 James的公钥
进行解密,解密后的明文hash值 和 接收到的明文的hash值进行对比,如果一样则是 James 发的
3. https协议
-
端口 443
image.png
3.1 问题
-
Q1:如何在网络中安全的将数据加密 传给 对方呢?
- A1:加密
-
Q2:用什么方式加密么?
-
A2:对称加密 -> 秘钥传送安全问题
-
A2:非对称加密 -> 公钥传送安全问题
-
-
Q3:解决方案
- A3:使用 权威认证机构(CA) 来证明 网站的公钥没被篡改 -- https
3.2 基本流程
-
操作系统内置 权威证书认证机构(
CA-CertificateAuthority
)的 机构证书X -
网站A 获取认证证书
-
生成自己的 公钥A 和 私钥A
-
找认证机构 生成 网站A证书,并保存在服务器中
-
证书(SSL)包含信息:
-
网站的域名,证书有效期,证书颁发机构
-
网站自己的公钥A等
-
-
-
-
浏览器 请求获取 网站A证书
-
浏览器 用 机构证书X 解密 网站A证书
-
解密成功:获取
网站A公钥
(只要解密成功,就说明 是 机构认证的) -
解密失败:认证失败
-
-
浏览器 将自己的秘钥 发给服务器
-
使用对称加密算法 生成
会话秘钥B
-
使用
网站A公钥
对会话秘钥B
做加密,并发给 服务器
-
-
浏览器和服务器 使用
浏览器会话秘钥B
来对 请求报文 和 响应报文 做加密
3.2 证书认证机构
-
如果证书颁发机构过多的话,不容易识别,防伪和管理,于是形成了少数几家国际权威的证书颁发机构,这些机构非常权威,默认是所有人都可信的,它们成为根证书。
-
但是除了这些机构外,其他的机构也需要被信任,因而,需要这些权威的机构去授信颁发证书,于是就形成了一级证书机构,一级证书机构又可以继续授信下级机构,于是成为树状结构,对于任何一个组织到根证书就是链状结构。
3.3 CA证书的保存
- 保存在系统中
网友评论