https学习

2021-03-05  本文已影响0人  知而乐者

https产生原因

由于http是明文传递数据,如果在客户端和服务器端设置个代理服务,完全可以拿到通信数据,https可以保证,通信是和真正的服务器通信(可能也是代理,但是没有意义,代理服务器无法拿到通信数据),https主要要保证怎么样传输数据是最安全的,及即使中间有个侵入的代理服务,代理服务也拿不到数据信息
需要解决两个问题:

https通信过程

1、客户端请求服务端,携带随机参数,以及包含客户端支持的SSL指定版本,加密组件列表(所使用的加密算法 密钥长度等)

Handshake Protocol: Client Hello
Version: TLS 1.2 (0x0303)
Random: 1cbf803321fd2623408dfe…
Cipher Suites (17 suites)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)

2、服务端选择算法,将证书返回(证书中包含公钥),以及选择的加密算法,以及一个随机数,以及一个用私钥加密的签名

Handshake Protocol: Server Hello
Version: TLS 1.2 (0x0303)
Random: 0e6320f21bae50842e96…
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)
Handshake Protocol: Server Key Exchange
EC Diffie-Hellman Server Params
Curve Type: named_curve (0x03)
Named Curve: x25519 (0x001d)
Pubkey: 3b39deaf00217894e...
Signature Algorithm: rsa_pkcs1_sha512 (0x0601)
Signature: 37141adac38ea4...

至此客户端和服务器通过明文共享了三个信息:Client Random、Server Random 和 Server Params。

3、客户端进行证书的验证,同时将证书里的公钥解析,将字符串解密,判断公钥是否合法

5、客户端和服务器手里有了三个随机数:Client Random、Server Random 和 Pre-Master。用这三个作为原始材料,就可以生成用于加密会 话的主密钥,叫“Master Secret”

6、握手就快结束了。客户端发一个“Change Cipher Spec”,然后再发一个“Finished”消息,把之前所有发送的数据做个摘要,再加密一下,让服务器做个验证

7、服务器也是同样的操作,发“Change Cipher Spec”和“Finished”消息,双方都验证加密解密 OK,握手正式结束,后面就收发被加密的 HTTP 请求和响应了


image.png

问题

为什么不直接用公钥和私钥加密传输数据?
非对称加密性能太差
第三方机构是怎么颁发证书的?

客户端如何验证证书的合法性?

公钥、私钥、数字证书的关系是什么?

上一篇 下一篇

猜你喜欢

热点阅读