HTTPS 协议原理
目录
1. HTTPS是什么
2. 概念准备
2.1 什么是加密
2.2 为什么要加密
2.3 常见的加密方式
2.3.1 对称加密
2.3.2 非对称加密
2.4 数据摘要&&数据指纹
2.5 数字签名
2.6 理解链 - 承上启下
3. HTTPS的工作过程探究
3.1 方案1 - 只使用对称加密
3.2 方案2 - 只使用非对称加密
3.3 方案3 - 双方都使用非对称加密
3.4 方案4 - 非对称加密 + 对称加密
3.4.1 中间人攻击 - 针对上面的场景
3.4.2 引入证书
3.4.3 理解数字签名
3.5 方案5 - 非对称加密 + 对称加密 + 证书认证
3.5.1 客户端进行认证
3.5.2 查看浏览器的受信任证书发布机构
3.5.3 中间人有没有可能篡改该证书?
3.5.4 中间人整个掉包证书?
4. 常见问题
4.1 为什么摘要内容在网络传输的时候一定要加密形成签名?
4.2 为什么签名不直接加密, 而是要先 hash 形成摘要?
4.3 如何成为中间人 - 了解
5. 完整流程
6. 总结
1. HTTPS是什么
HTTPS也是一个应用层协议.是在HTTP协议的基础上引入了一个加密层。
HTTP协议内容都是按照文本的方式明文传输的.这就导致在传输过程中出现一些被篡改的情况。
HTTPS是经过加密和解密的HTTP。
2. 概念准备
2.1 什么是加密
- 加密就是把明文(要传输的信息)进行一系列变换,生成密文。
- 解密就是把密文再进行一系列变换,还原成明文。
- 在这个加密和解密的过程中,往往需要一个或者多个中间的数据,辅助进行这个过程,这样的数据称为密钥(正确发音yue四声,不过大家平时都读作yao四声)。
明文到密文是要通过密钥的,反过来也是一样的。
加密解密到如今已经发展成一个独立的学科:密码学。
而密码学的莫基人,也正是计算机科学的祖师爷之一,艾伦·麦席森·图灵。
2.2 为什么要加密
臭名昭著的 "运营商劫持"
下载一个 天天动听
未被劫持的效果, 点击下载按钮, 就会弹出天天动听的下载链接.
已被劫持的效果, 点击下载按钮, 就会弹出 QQ 浏览器的下载链接
由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器,交换机等)。
那么运营商的网络设备就可以解析出你传输的数据内容,并进行篡改。
点击"下载按钮”,其实就是在给服务器发送了一个HTTP请求,获取到的HTTP响应其实就包含了该APP的下载链接.运营商劫持之后,就发现这个请求是要下载天天动听,那么就自动的把交给用户的响应给篡改成"QQ浏览器”的下载地址了。
所以:因为http的内容是明文传输的,明文数据会经过路由器、wifi热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击,所以我们才需要对信息进行加密。
思考下, 为啥运营商要进行劫持?
不止运营商可以劫持, 其他的 黑客 也可以用类似的手段进行劫持, 来窃取用户隐私信息,或者篡改容。
试想一下, 如果黑客在用户登陆支付宝的时候获取到用户账户余额, 甚至获取到用户的支付密码.....。
在互联网上, 明文传输是比较危险的事情!!!
HTTPS 就是在 HTTP 的基础上进行了加密, 进一步的来保证用户的信息安全~
2.3 常见的加密方式
2.3.1 对称加密
- 采用单钥密码系统的加密方法, 同一个密钥可以同时用作信息的加密和解密, 这种加密方法称为对称加密, 也称为单密钥加密, 特征: 加密和解密所用的密钥是相同的 。
- 常见对称加密算法(了解): DES、 3DES、 AES、 TDEA、 Blowfish、 RC2 等
- 特点: 算法公开、 计算量⼩、 加密速度快、 加密效率⾼
对称加密其实就是通过同一个 "密钥" , 把明文加密成密文, 并且也能把密文解密成明文.
一个简单的对称加密, 按位异或
假设 明文 a = 1234, 密钥 key = 8888
则加密 a ^ key 得到的密文 b 为 9834然后针对密文 9834 再次进行运算 b ^ key, 得到的就是原来的明文 1234. (对于字符串的对称加密也是同理, 每一个字符都可以表⽰成一个数字)当然, 按位异或只是最简单的对称加密. HTTPS 中并不是使用按位异或
2.3.2 非对称加密
- 需要两个密钥来进行加密和解密, 这两个密钥是公开密钥(public key, 简称公钥) 和私有密钥(private key, 简称私钥) 。
- 常见非对称加密算法(了解): RSA, DSA, ECDSA
- 特点: 算法强度复杂、 安全性依赖于算法与密钥但是由于其算法复杂, 而使得加密解密速度没有对称加密解密的速度快
非对称加密要用到两个密钥, 一个叫做 "公钥", 一个叫做 "私钥"。
公钥和私钥是配对的. 最大的缺点就是运算速度非常慢, 比对称加密要慢很多。
- 通过公钥对明文加密, 变成密文
- 通过私钥对密文解密, 变成明文
用公钥加密,只有私钥能解密,能解密的人非常少。
也可以反着用
- 通过私钥对明文加密, 变成密文
- 通过公钥对密文解密, 变成明文
只有持有私钥的人才能加密。
非对称加密的数学原理比较复杂, 涉及到一些 数论 相关的知识. 这里举一个简单的生活上的例子。
A 要给 B 一些重要的文件, 但是 B 可能不在. 于是 A 和 B 提前做出约定:B 说: 我桌子上有个盒子, 然后我给你一把锁, 你把文件放盒子里用锁锁上, 然后我回头拿着钥匙来开锁取文件。
在这个场景中, 这把锁就相当于公钥, 钥匙就是私钥. 公钥给谁都行(不怕泄露), 但是私钥只有 B 自己持有. 持有私钥的人才能解密。
2.4 数据摘要&&数据指纹
数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash 函数)对信息进行运算,生成一串固定⻓度的数字摘要。 数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。
摘要常见算法: 有 MD5、 SHA1、 SHA256、 SHA512 等, 算法把无限的映射成有限, 因此可能会有碰撞(两个不同的信息, 算出的摘要相同, 但是概率非常低)。
摘要特征: 和加密算法的区别是, 摘要严格意义不是加密, 因为没有解密, 只不过从摘要很难反推原信息, 通常用来进行数据对比。
用到数据摘要的地方很多,比如说一款软件,这个软件需要登录,那么用户的用户名和密码肯定是要放到数据库中,但是数据库中也不能放明文,就要放经过哈希算法计算后的数据吗,当有人登录的时候,使用用户名和密码登录,那么这个用户名和密码就会经过哈希算法计算后和数据库中对比。
2.5 数字签名
摘要经过加密,就得到数字签名。
2.6 理解链 - 承上启下
对http进行对称加密,能够解决数据通信安全的问题?问题是什么?
对称加密HTTP的问题: 理论上可加密保障机密性,但核心难题是密钥的安全分发与身份认证缺失。
为何要用非对称加密?为何不全用非对称加密?
非对称加密的作用与局限: 用于安全协商对称密钥和身份认证,但因性能开销巨大不适合全程加密通信。
3. HTTPS的工作过程探究
既然要保证数据安全,就需要进行加密。
网络传输中不再直接传输明文了,而是加密后的密文。
加密的方式有很多,但是整体可以分成两大类:对称加密和非对称加密。
3.1 方案1 - 只使用对称加密
如果通信双方都各自持有同一个密钥X,且没有别人知道,这两方的通信安全当然是可以被保证的(除非密钥被破解)。
引入对称加密之后,即使数据被截获,由于黑客不知道密钥是啥,因此就无法进行解密,也就不知道请求的真实内容是啥了。
但事情没这么简单,服务器同一时刻其实是给很多客户端提供服务的.这么多客户端,每个人用的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了,黑客就也能拿到了)
因此服务器就需要维护每个客户端和每个密钥之间的关联关系,这也是个很麻烦的事情~
比较理想的做法,就是能在客户端和服务器建立连接的时候,双方协商确定这次的密钥是啥~
但是如果直接把密钥明文传输,那么黑客也就能获得密钥了~~此时后续的加密操作就形同虚设了。
因此密钥的传输也必须加密传输!
但是要想对密钥进行对称加密,就仍然需要先协商确定一个"密钥的密钥”,这就成了"先有鸡还是先有蛋”的问题了.此时密钥的传输再用对称加密就行不通了。
3.2 方案2 - 只使用非对称加密
鉴于非对称加密的机制,如果服务器先把公钥以明文方式传输给浏览器,之后浏览器向服务器传数据前都先用这个公钥加密好再传,从客户端到服务器信道似乎是安全的(有安全问题),因为只有服务器有相应的私钥能解开公钥加密的数据。
但是服务器到浏览器的这条路怎么保障安全?
如果服务器用它的私钥加密数据传给浏览器,那么浏览器用公钥可以解密它,而这个公钥是一开始通过明文传输给浏览器的,若这个公钥被中间人劫持到了,那他也能用该公钥解密服务器传来的信息了。
方案2有两个问题:
- 保证单向的数据安全(临时)
- 运算速度非常慢
3.3 方案3 - 双方都使用非对称加密
- 服务端拥有公钥S与对应的私钥S',客户端拥有公钥C与对应的私钥C
- 客户和服务端交换公钥
- 客户端给服务端发信息:先用S对数据加密,再发送,只能由服务器解密,因为只有服务器有私钥S'。
- 服务端给客户端发信息:先用C对数据加密,在发送,只能由客户端解密,因为只有客户端有私钥C'。
这样貌似也行啊,但是
- 效率太低
- 依旧有安全问题
3.4 方案4 - 非对称加密 + 对称加密
先解决效率问题
- 服务端具有非对称公钥S和私钥S'
- 客户端发起https请求,获取服务端公钥S
- 客户端在本地生成对称密钥C,通过公钥S加密,发送给服务器
- 由于中间的网络设备没有私钥,即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥(真的吗?)。
- 服务器通过私钥S'解密,还原出客户端发送的对称密钥C,并且使用这个对称密钥加密给客户端返回的响应数据。
- 后续客户端和服务器的通信都只用对称加密即可,由于该密钥只有客户端和服务器两个主机知道,其他主机/设备不知道密钥即使截获数据也没有意义。
由于对称加密的效率比非对称加密⾼很多,因此只是在开始阶段协商密钥的时候使用非对称加密, 后 续的传输仍然使用对称加密。
虽然上面已经比较接近答案了,但是依旧有安全问题。
方案2,方案3,方案4都存在一个问题,如果最开始,中间人就已经开始攻击了呢?
3.4.1 中间人攻击 - 针对上面的场景
- Man-in-the-MiddleAttack, 简称“MITM 攻击”
确实, 在方案 2/3/4 中, 客户端获取到公钥 S 之后, 对客户端形成的对称秘钥 X 用服务端给客户端的公钥 S 进行加密, 中间人即使窃取到了数据, 此时中间人确实无法解出客户端形成的密钥 X, 因为只有服务器有私钥 S'。
但是中间人的攻击, 如果在最开始握手协商的时候就进行了, 那就不一定了, 假设hacker 已经成功成为中间人。
- 服务器具有非对称加密算法的公钥 S, 私钥 S'
- 中间人具有非对称加密算法的公钥 M, 私钥 M'
- 客户端向服务器发起请求, 服务器明文传送公钥 S 给客户端
- 中间人劫持数据报文, 提取公钥 S 并保存好, 然后将被劫持报文中的公钥 S 替换成为自己的公钥 M, 并将伪造报文发给客户端
- 客户端收到报文, 提取公钥 M(自己当然不知道公钥被更换过了), 自己形成对称秘钥 X, 用公钥 M 加密 X, 形成报文发送给服务器
- 中间人劫持后, 直接用自己的私钥 M'进行解密, 得到通信秘钥 X, 再用曾经保存的服务端公钥 S 加密后, 将报文推送给服务器
- 服务器拿到报文, 用自己的私钥 S'解密, 得到通信秘钥 X
- 双方开始采用 X 进行对称加密, 进行通信。 但是一切都在中间人的掌握中, 劫持数据, 进行窃听甚至修改, 都是可以的
客户端先和服务器建立连接,服务器将自己的S(公钥)发送给客户端,要经过路由器,也就是被中间人控制的机器,此时中间人劫持了S(公钥),将自己的M(公钥)发送给客户端,客户端还以为是服务器发过来的,然后客户端生成对称密钥,用M(公钥)加密形成密文,经过中间人发送给服务器,中间人用M`(私钥解密),得到客户端形成的对称密钥X,然后保存起来,再用S(公钥)加密X发送给服务器,这样中间人就得到了对称密钥X了。
上面的攻击方案, 同样适用于方案 2, 方案 3。
问题本质出在哪里了呢? 客户端无法确定收到的含有公钥的数据报文, 就是⽬ 标服务器发送过来的!如果客户端可以知道发过来的含有公钥的数据报文有没有被篡改过,那中间人的方式就失效了。
3.4.2 引入证书
CA认证
服务器在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明服务端公钥的权威性。
所有的浏览器(客户端)一般都要内置可信的CA机构或者权威的子机构的公钥。
基本说明:
CA认证_百度百科CA认证,即电子认证服务,是指为电子签名相关各方提供真实性、可靠性验证的活动。证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。https://baike.baidu.com/item/CA%E8%AE%A4%E8%AF%81/6471579?fr=aladdin这个证书可以理解成是一个结构化的字符串,里面包含了以下信息:
- 证书发布机构
- 证书有效期
- 公钥
- 证书所有者
- 签名
- ......
需要注意的是: 申请证书的时候, 需要在特定平台生成查, 会同时生成一对⼉密钥对⼉, 即公钥和私钥。 这对密钥对⼉就是用来在网络通信中进行明文加密以及数字签名的。
其中公钥会随着 CSR 文件, 一起发给 CA 进行权威认证, 私钥服务端自己保留, 用来后续进行通信(其实主要就是用来交换对称秘钥)
可以使用在线生成 CSR 和私钥:CSR在线生成工具在申请数字证书之前,必须先生成证书私钥和证书请求文件(CSR,Cerificate Signing Request),CSR是公钥证书原始文件,包含了服务器信息和单位信息,需要提交给CA认证中心。在生成CSR文件时会同时生成私钥文件,请妥善保管和备份您的私钥。本工具是CSR在线生成工具工具、生成CSR工具、ECC CSR文件生成、SSL证书的 ECC RSA文件生成、代码签名证书的 ECC RSA文件生成、国密SSL的 SM2文件生成、Certificate Signing Request Generator tools。https://myssl.com/csr_create.html形成 CSR 之后, 后续就是向 CA 进行申请认证, 不过一般认证过程很繁琐, 网络各种提供证书申请的服务商, 一般真的需要, 直接找平台解决就行。
3.4.3 理解数字签名
签名的形成时基于非对称加密算法的,注意,目前暂时和https没有关系,不要和https中的公钥私钥搞混了。
当服务端申请 CA 证书的时候, CA 机构会对该服务端进行审核, 并专⻔为该网站形成数字签名, 过程如下:
- CA 机构拥有非对称加密的私钥 A 和公钥 A'
- CA 机构对服务端申请的证书明文数据进行 hash, 形成数据摘要
- 然后对数据摘要用 CA 私钥 A'加密, 得到数字签名 S
服务端申请的证书明文和数字签名 S 共同组成了数字证书, 这样一份数字证书就可以颁发给服务端了。
3.5 方案5 - 非对称加密 + 对称加密 + 证书认证
在客户端和服务器刚一建立连接的时候,服务器给客户端返回一个证书,证书包含了之前服务端的公钥,要包含了网站的身份信息。
3.5.1 客户端进行认证
- 当客户端获取到这个证书之后, 会对证书进行校验(防止证书是伪造的)。
- 判定证书的有效期是否过期。
- 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构)。
- 验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对比 hash1 和 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的。
3.5.2 查看浏览器的受信任证书发布机构
Chrome浏览器,点击右上角。
点击设置,隐私设置和安全性 -> 安全。
3.5.3 中间人有没有可能篡改该证书?
- 中间人篡改了证书的明文
- 由于他没有 CA 机构的私钥, 所以无法 hash 之后用私钥加密形成签名, 那么也就没法办法对篡改后的证书形成匹配的签名
- 如果强行篡改, 客户端收到该证书后会发现明文和签名解密后的值不一致, 则说明证书已被篡改, 证书不可信, 从而终止向服务器传输信息, 防止信息泄露给中间人
3.5.4 中间人整个掉包证书?
- 因为中间人没有 CA 私钥, 所以无法制作假的证书(为什么? )
- 所以中间人只能向 CA 申请真证书, 然后用自己申请的证书进行掉包
- 这个确实能做到证书的整体掉包, 但是别忘记, 证书明文中包含了域名等服务端认证信息, 如果整体掉包, 客户端依旧能够识别出来。
- 永远记住: 中间人没有 CA 私钥, 所以对任何证书都无法进行合法修改, 包括自己的
4. 常见问题
4.1 为什么摘要内容在网络传输的时候一定要加密形成签名?
常见的摘要算法有: MD5 和 SHA 系列
- 以 MD5 为例, 我们不需要研究具体的计算签名的过程, 只需要了解 MD5 的特点:
- 定⻓: 无论多⻓的字符串, 计算出来的 MD5 值都是固定⻓度 (16 字节版本或者32 字节版本)
- 分散: 源字符串只要改变一点点, 最终得到的 MD5 值都会差别很大.
- 不可逆: 通过源字符串生成 MD5 很容易, 但是通过 MD5 还原成原串理论上是不可能的.
正因为 MD5 有这样的特性, 我们可以认为如果两个字符串的 MD5 值相同, 则认为这两个字符串相同
理解判定证书篡改的过程: (这个过程就好比判定这个身份证是不是伪造的身份证)。
假设我们的证书只是一个简单的字符串 hello, 对这个字符串计算 hash 值(比如 md5),结果为 BC4B2A76B9719D91
如果 hello 中有任意的字符被篡改了, 比如变成了 hella, 那么计算的 md5 值就会变化很大. BDBD6F9CF51F2FD8
然后我们可以把这个字符串 hello 和 哈希值 BC4B2A76B9719D91 从服务器返回给客
户端, 此时客户端如何验证 hello 是否是被篡改过?
那么就只要计算 hello 的哈希值, 看看是不是 BC4B2A76B9719D91 即可。
但是还有个问题, 如果黑客把 hello 篡改了, 同时也把哈希值重新计算下, 客户端就分辨不出来了呀。
所以被传输的哈希值不能传输明文, 需要传输密文。
所以, 对证书明文(这里就是“hello”)hash 形成散列摘要, 然后 CA 使用自己的私钥加密形成签名, 将 hello 和加密的签名合起来形成 CA 证书, 颁发给服务端, 当客户端请求的时候, 就发送给客户端, 中间人截获了, 因为没有 CA 私钥, 就无法更改或者整体掉包, 就能安全的证明, 证书的合法性。
最后, 客户端通过操作系统里已经存的了的证书发布机构的公钥进行解密, 还原出原始的哈希值, 再进行校验。
4.2 为什么签名不直接加密, 而是要先 hash 形成摘要?
- 缩⼩签名密文的⻓度,加快数字签名的验证签名的运算速度
4.3 如何成为中间人 - 了解
- ARP 欺骗: 在局域网中, hacker 经过收到 ARP Request⼴播包, 能够偷听到其它节点的 (IP, MAC)地址。 例, 黑客收到两个主机 A, B 的地址, 告诉 B (受害者) , 自己是 A, 使得 B 在发送给 A 的数据包都被黑客截取。
- ICMP 攻击: 由于 ICMP 协议中有重定向的报文类型, 那么我们就可以伪造一个ICMP 信息然后发送给局域网中的客户端, 并伪装自己是一个更好的路由通路。 从而导致⽬ 标所有的上网流量都会发送到我们指定的接⼝ 上, 达到和 ARP 欺骗同样的效果。
- 假 wifi && 假网站等。
5. 完整流程
左侧都是客户端做的事情, 右侧都是服务器做的事情.
6. 总结
HTTPS 工作过程中涉及到的密钥有三组:
- 第一组(非对称加密): 用于校验证书是否被篡改. 服务器持有私钥(私钥在形成 CSR 文件与申请证书时获得), 客户端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器在客户端请求时, 返回携带签名的证书. 客户端通过这个公钥进行证书验证, 保证证书的合法性, 进一步保证证书中携带的服务端公钥权威性。
- 第⼆组(非对称加密): 用于协商生成对称加密的密钥. 客户端用收到的 CA 证书中的公钥(是可被信任的)给随机生成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密获取到对称加密密钥。
- 第三组(对称加密): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密。
其实一切的关键都是围绕这个对称加密的密钥. 其他的机制都是辅助这个密钥工作的.。
第⼆组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器。
第一组非对称加密的密钥是为了让客户端拿到第⼆组非对称加密的公钥。
我们把 HTTPS 加密想象成一次需要高度保密的快递配送过程,这样理解起来就轻松多了!
核心目标: 你(浏览器)和网站(服务器)之间传递的信息(快递包裹)不能被任何中间人(快递员、路人甲、黑客)偷看或篡改。
关键角色:
-
你 (浏览器): 想安全地访问
https://www.example-bank.com
的人。 -
网站服务器 (服务器):
www.example-bank.com
的网站服务器,存放着你想看的信息。 -
证书颁发机构 (CA - Certificate Authority): 互联网上公认的、非常权威的“身份证签发中心”(比如 DigiCert, Let's Encrypt, GlobalSign 等)。它们负责验证网站的真实身份并颁发“数字身份证”(SSL/TLS 证书)。
-
SSL/TLS 证书: 网站的“数字身份证”。它里面包含了:
-
网站的公钥(可以想象成一把特殊的、能上锁但不能开锁的“公开锁”)。
-
网站的身份信息(主要是域名
www.example-bank.com
)。 -
签发这个证书的 CA 信息。
-
证书的有效期。
-
一个由 CA 用它的顶级私钥进行的“数字签名”(可以想象成 CA 在身份证上盖的权威防伪印章)。
-
-
公钥 & 私钥: 非对称加密的核心。
-
公钥: 公开的,任何人都能拿到(就在证书里)。用来加密数据,或者验证数字签名。就像那把“公开锁”,谁都可以用它把箱子锁上。
-
私钥: 绝密的,只有服务器自己知道。用来解密用其配对的公钥加密的数据,或者创建数字签名。就像唯一能打开那把“公开锁”的钥匙。
-
HTTPS 加密全过程 (快递配送版):
-
建立基础连接 (TCP 握手 - 找到快递站):
-
你告诉浏览器访问
https://www.example-bank.com
。 -
浏览器联系
www.example-bank.com
的服务器:“喂,你好!我是浏览器,我要和你建立安全连接!” -
服务器回应:“你好浏览器!我是
www.example-bank.com
的服务器,准备好建立安全连接了。” 这是基础的 TCP 连接建立,就像确认了快递收件地址和寄件地址有效且能送达。
-
-
服务器出示“身份证” (发送 SSL/TLS 证书):
-
服务器做的第一件事就是把自己的“数字身份证”(SSL/TLS 证书)发送给你的浏览器。它说:“这是我的身份证,证明我就是
www.example-bank.com
,请查收!”
-
-
浏览器严格检查“身份证” (证书验证):
-
检查颁发者 (CA 是否可信): 浏览器拿到证书,先看是谁签发的(哪个 CA 盖的章)。浏览器自带一个“可信 CA 根证书列表”(就像你手机里存着公安局、大使馆等权威机构的印章样本)。它检查签发这个网站证书的 CA 是否在这个可信列表里。如果不在,浏览器会立刻弹出严重警告! (就像快递员发现身份证是路边小摊伪造的,直接拒收!)
-
检查有效期: 浏览器检查证书是否在有效期内。过期的证书无效!(就像身份证过期了不能用)。
-
检查域名: 浏览器检查证书里写的域名 (
www.example-bank.com
) 是否和你实际访问的域名完全一致。如果不一致(比如证书是给example-bank.com
的,没有www
,或者给的是another-site.com
),浏览器也会发出警告!(就像身份证名字和收件人名字对不上)。 -
检查吊销状态 (可选但重要): 浏览器可能会进一步在线查询 CA 的证书吊销列表 (CRL) 或使用在线证书状态协议 (OCSP),确认这个证书没有被 CA 提前吊销(比如因为私钥泄露了)。(就像快递员联网查一下这个身份证是不是被挂失了)。
-
验证数字签名 (防伪核心): 这是最关键的一步!浏览器用 CA 根证书里的 CA 公钥 去尝试解密证书上的“数字签名”。如果解密成功并能验证其内容与证书信息一致,就证明:
-
这个证书确实是该可信 CA 签发的(防伪章是真的)。
-
证书在签发后没有被篡改过(内容完整)。
-
-
只有以上所有检查都通过,浏览器才信任这个证书,进而信任服务器就是它声称的那个网站! 如果任何一步失败,连接会中止并警告用户。
-
-
协商“快递箱密码” (密钥交换 - 生成会话密钥):
-
浏览器确认服务器身份可信后,需要和服务器商量一个只有它们俩知道的临时秘密密码(称为“会话密钥”)。这个密码将用于后续对称加密实际传输的数据(速度快!)。
-
如何安全地商量密码? 这里就用到了证书里的服务器公钥!
-
常见方法 (RSA): 浏览器自己生成一个随机的“会话密钥”,然后用服务器的公钥(从证书里拿到的)把这个会话密钥加密,发送给服务器。只有拥有对应私钥的服务器才能解密出这个会话密钥。这样,双方就安全地共享了同一个秘密密码。
-
更现代的方法 (ECDHE): 双方通过复杂的数学运算(基于椭圆曲线),各自生成一部分密钥材料,在不直接传输完整密钥的情况下,也能协商出一个相同的会话密钥。即使中间人截获了交换过程的数据,也无法算出会话密钥。这个过程还具备“前向保密”特性(即使服务器私钥未来泄露,过去的会话密钥也无法被破解)。
-
-
现在,浏览器和服务器都拥有了相同的、安全的会话密钥 (Session Key)。就像你和银行约定了一个只有你们俩知道的、一次性的复杂密码来锁快递箱。
-
-
开始安全“配送” (加密通信):
-
从现在开始,浏览器用这个会话密钥加密所有要发送给服务器的数据(比如你的登录密码、查询请求)。
-
服务器收到加密数据后,用同样的会话密钥解密,处理你的请求。
-
服务器返回数据(比如你的账户信息)时,也用这个会话密钥加密。
-
浏览器收到后,再用会话密钥解密,显示给你看。
-
整个过程,任何中间人即使截获了数据包,看到的也只是一堆毫无意义的乱码,因为他们没有那个会话密钥! 就像快递箱被牢固的密码锁锁住,只有你和银行知道密码。
-
证书颁发机构 (CA) 是如何颁发证书的?(“身份证”办理流程):
-
网站申请 (提交材料): 网站管理员 (
www.example-bank.com
) 向一个 CA (比如 Let's Encrypt) 申请证书。-
管理员在服务器上生成一对公钥和私钥。私钥必须绝对保密地保存在服务器上!
-
管理员创建一个 证书签名请求 文件。这个 CSR 文件里包含了:
-
网站的公钥。
-
网站的域名信息 (
www.example-bank.com
)。 -
申请者的一些组织信息(可选,取决于证书类型)。
-
-
管理员将 CSR 文件提交给 CA。
-
-
CA 严格验证身份 (审核材料): 这是 CA 的核心价值! CA 不会随便发证,必须验证申请者确实拥有并控制着这个域名。
-
域名验证 (DV): 最常见。CA 会要求申请者证明他控制着
www.example-bank.com
。方法通常有:-
DNS 验证: 要求申请者在域名的 DNS 记录里添加一条 CA 指定的特殊记录。
-
文件验证: 要求申请者在网站根目录下放置一个 CA 指定的特殊文件。
-
邮箱验证: 向该域名下的特定管理邮箱(如
admin@example-bank.com
)发送验证邮件。
-
-
组织验证 (OV) & 扩展验证 (EV): 更高级别的证书。CA 除了验证域名所有权,还会人工审核申请者的真实组织身份和法律实体(比如核查公司营业执照、电话确认等)。EV 证书会让浏览器地址栏显示公司名称(绿色),提供最高级别的信任标识(虽然现在视觉区别变小了)。
-
-
CA 签发证书 (制作并盖章): 一旦验证通过,CA 就会:
-
使用申请者 CSR 中的公钥和域名信息。
-
添加证书有效期等信息。
-
最关键一步: CA 使用自己绝密的顶级私钥,对证书的所有内容计算一个数字签名(相当于盖上权威的防伪印章)。
-
将生成的证书(包含公钥、域名信息、CA 信息、有效期和数字签名)发送给网站管理员。
-
-
网站安装证书 (持证上岗): 网站管理员将 CA 颁发的证书安装到自己的 Web 服务器上,并配置好服务器使用其对应的私钥。
总结 HTTPS 的核心优势:
-
加密: 会话密钥确保传输内容无法被窃听(隐私性)。
-
身份认证: CA 签发的证书确保你连接的是真正的目标网站,而不是钓鱼网站(真实性)。
-
完整性保护: TLS 协议内置机制确保数据在传输过程中没有被篡改(完整性)。
整个过程虽然复杂,但现代浏览器和服务器都自动处理了绝大部分细节。你只需要认准地址栏里的 https://
和那个小锁图标,就能知道你的通信是安全的!就像你看到快递员穿着正规制服、出示了盖有权威机构印章的证件,并且用只有你和银行知道的密码锁运送包裹,自然就放心了。