【网络通讯安全认证的理解:从密钥签名、数字证书到 HTTPS/TLS 流程】
网络通讯安全认证的理解:从密钥签名、数字证书到 HTTPS/TLS 流程
目录
- 网络通讯安全认证的理解:从密钥签名、数字证书到 HTTPS/TLS 流程
-
- 一、密钥对(公钥和私钥)和签名的理解
-
- 1.1 公钥
- 1.2 私钥
- 1.3 签名
- 二、证书的理解
-
- 2.1 关于证书是哪里来的
- 2.2 怎么证明这个证书是真正的证书还是伪造的证书?
- 2.3 证书的格式
- 2.4 可用的证书在线解析网站推荐
- 2.5 证书链、中间证书,客户端证书、根证书的理解
-
- 2.5.1 证书链、中间证书,客户端证书、根证书的关联
- 2.5.2 既然可以根证书到客户端证书,为什么还需要中间证书?
- 2.5.3 证书之间是如何验证?
- 2.5.4 证书是如何被吊销的?
- 三、HTTPS通讯流程(TLS/SSL)
-
- 通讯过程
-
- 1、根据url上的域名DNS去获取实际的IP地址
- 2、接下里使用TCP进行连接(三次握手)
- 3、建立TLS连接(握手阶段)
-
- 步骤 1:客户端发起握手请求(Client Hello)
- 步骤 2:服务器回应并发送身份凭证(Server Hello + 证书链)
- 步骤 3:浏览器验证证书链(核心安全校验)
- 步骤 4:密钥交换与会话密钥生成(ECDHE 算法为例)
- 步骤 5:握手结束确认
- 步骤6:通讯加密
一、密钥对(公钥和私钥)和签名的理解
这里假设有通讯方A和通讯方B进行加密通讯。
1.1 公钥
公钥是可以公开的,主要有两个作用
第一个是用来对通讯数据进行加密,如果A发送数据,那么就你需要使用B提供的公钥进行加密,然后B收到数据之后用自己的私钥进行解密。
第二个作用就是用来验证签名,因为签名是由B的私钥生成的,所以就可以用B先前提供给A的公钥进行验证签名是否真的来自于对方,防止数据伪造。
1.2 私钥
私钥是必须保密的,只有自己持有和指导,一旦公开,那数据就没有安全性可言了,主要也是两个作用
第一个是当A使用B的公钥加密数据时候,B就可以使用私钥进行解密
第二个是用于签名的生成,例如B使用私钥生成了签名,那么发送给A,A就可以使用B提供的公钥进行解密。
私钥的格式如下
-----BEGIN PRIVATE KEY-----
MIGTAgSDFSDFSDFDSCSDFDSFDSFEHBHkwdwIBAQQg55Buo2jTJYs2Fmsj
IGcryPcjT4JeD
-----END PRIVATE KEY-----
公钥的格式如下
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzsdaAQYIKoZIz3233QcDQgAE6Xmz1Hi60GBcUYrvuYEr1K9sauPC
p5799jp5xNsdfLk4C05asdsadasfdP4+mgNzmgNz0xGEOltrOndxxaw==
-----END PUBLIC KEY-----
1.3 签名
签名其实可以理解为传统意义上的手写签名。主要为了证明这个文件或者物品是签名的那个人。
在通讯上,若发送者A发送一段数据,那么如果证明这个数据就是A发出的,万一是其他人伪造的呢?以及发送的数据到底有没有存在篡改或者丢失,所以为了解决这两个问题,发送者可以多发送一份数据–签名。
签名的生成和验证过程是什么样的?
A:首先对原始数据(要发送给对方的数据)进行哈希值算法计算,然后使用私钥对这个哈希值进行加密,这个加密数据就是签名。然后将原始数据和签名一起发送给对方。
B:收到原始数据和签名后,使用发送方之前提供的公钥对签名进行解密,若解密失败,说明这个签名不是对方发送的,若解密成功,则确认该数据确确实是对方发送的(作用1),之后可以看到一串哈希值,然后在本地对原始数据进行哈希值计算,最后将两个哈希值进行比较,则可以确认对方发送的数据是否被篡改(作用2)。