zhaobinglong / myBlog

https://zhaobinglong.github.io/myBlog/
MIT License
7 stars 0 forks source link

http协议之https #76

Open zhaobinglong opened 3 years ago

zhaobinglong commented 3 years ago

https的本质

还是http协议,http和tcp之间多了一层ssl

SSL(TLS)

SSL就是TLS的加强版,互联网最初的版本为1.0版本。从其名字就可以看出,其核心使命就是保证传输层的安全。各个通信部门成员的占位与SSL占位一致: http协议通过TSL加密,就是https,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。 image

CA (数字证书)

使用对称和非对称混合的方式,实现了数据的加密传输。但是这种仍然存在一个问题,服务器可能是被黑客冒充的。这样,浏览器访问的就是黑客的服务器,黑客可以在自己的服务器上实现公钥和私钥,而对浏览器来说,它并不完全知道现在访问的是这个是黑客的站点。 服务器需要证明自己的身份,需要使用权威机构颁发的证书,这个权威机构就是 CA(Certificate Authority), 颁发的证书就称为数字证书 (Digital Certificate)。 对于浏览器来说,数字证书有两个作用:

通过数字证书向浏览器证明服务器的身份。数字证书里面包含了服务器公钥

参考

http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html https://mp.weixin.qq.com/s/t4zVupywiX1k0CZnRf-7zA

zhaobinglong commented 3 years ago

http和https区别

zhaobinglong commented 3 years ago

加密过程

本质上就是生成了一个只有client和server知道的密钥(一个随机字符串)

  1. 客户端发起请求,请求一个https的url,根据RFC2818的规定,Client知道需要连接Server的443(默认)端口,其中携带
  1. server端收到请求,下发公钥证书(public key certificate)证书给浏览器,这个证书开发者一般会放在nginx根目录,然后在nginx配置文件中指定ssl文件路径,本次下发还会携带一个随机数random2(用于生成"对话密钥")。
    // https的加密过程涉及到两种加密方式,对称加密和非对称加密
    server {
    ···
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ...
    }
  2. Client验证公钥证书,如果验证不通过,显示红色的警告信息。
  3. Client使用伪随机数生成器生成第三个随机数pre-master secret,然后使用证书中的公钥进行加密,然后传递给服务器端。
  4. Server使用自己的私钥(private key)解密这个消息,得到pre-master secre。至此,Client和Server双方都持有了相同的client_random、server_random和pre_random。然后两者用相同的加密方法混合这三个随机数,生成最终的密钥。
  5. server端使用密钥加密网页,返回给客户端
  6. 客户端使用私钥揭秘,拿到网页内容
zhaobinglong commented 3 years ago

HTTPS 加密算法

为了保护数据的安全,HTTPS 主要用了下面的算法

1.对称加密:有流式、分组两种,加密和解密都是使用的同一个密钥。例如:DES、AES-GCM、ChaCha20-Poly1305 等。这一步浏览器端生成密钥。 2.非对称加密:加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥和算法都是公开的,私钥是保密的。非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。例如:RSA、DSA、ECDSA、 DH、ECDHE 等。这一步是服务器下发公钥。

  1. 哈希算法:将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆。例如:MD5、SHA-1、SHA-2、SHA-256 等。
  2. 数字签名:签名就是在信息的后面再加上一段内容(信息经过 hash 后的值),可以证明信息没有被修改过。hash 值一般都会加密后(也就是签名)再和信息一起发送,以保证这个 hash 值不被修改。这一步体现在服务器下发公钥,浏览器利用数字签名来校验公钥的真实性
zhaobinglong commented 3 years ago

客户端如何验证公钥有效性

描述

服务器下发数字证书和公钥给浏览器。首先,会读取证书中的明文内容。CA 进行数字证书的签名时会保存一个 Hash 函数,来这个函数来计算明文内容得到信息A,然后用公钥解密明文内容得到信息B,两份信息做比对,一致则表示认证合法。

zhaobinglong commented 3 years ago

浏览器如何验证证书是否被吊销了。

被吊销后的证书是无效的。验证吊销有CRL(证书吊销列表)和OCSP(在线证书检查)两种方法。