Https建立连接过程
1.建立三次握手
2.客户端先发起client hello
Client Hello
: 客户端发送Client Hello消息,提供其支持的加密算法、sessionId,随机值等信息
3.服务端响应Server Hello
Server Hello
: 生成随机数,服务器选择一组加密算法,并发送Server Hello消息。
4.服务端Certificate, Server Key Exchange, Server Hello Done
服务器发送其证书、可能的服务器密钥交换消息(如果需要的话)并结束握手消息。
5.客户端Client Key Exchange, Change Cipher Spec, Encrypted Handshake
户端发送客户端密钥交换消息、更改密码规范和加密的握手消息。
6.客户端和服务端生成对称主密钥进行数据加密传输
主密要生成方式
-
ECDHE 密钥交换:
-
客户端和服务器各自生成一个EC密钥对(公钥和私钥)。
-
在
ClientKeyExchange
消息中,客户端将其公钥发送给服务器。 -
在
ServerKeyExchange
消息中,服务器将其公钥发送给客户端。 -
客户端和服务器各自使用自己的私钥和对方的公钥来计算共享秘密,这个共享秘密即为
PreMasterSecret
。 -
然后,
PreMasterSecret
与ClientRandom
和ServerRandom
一起用于生成MasterSecret
,再进一步导出对称会话密钥。在这种方式下
PreMasterSecret
是不会有的传输的。
-
-
RSA 密钥交换:
- 客户端生成一个随机的
PreMasterSecret
。 - 客户端使用服务器的RSA公钥加密
PreMasterSecret
并在ClientKeyExchange
消息中发送给服务器。 - 服务器使用其私钥解密得到
PreMasterSecret
。 - 同样,
PreMasterSecret
与ClientRandom
和ServerRandom
一起用于生成MasterSecret
,再进一步导出对称会话密钥。
- 客户端生成一个随机的
ntRandom和
ServerRandom一起用于生成
MasterSecret`,再进一步导出对称会话密钥。
对于上述两种方法,在得到MasterSecret
后,都会使用特定的伪随机函数(PRF)结合MasterSecret
、ClientRandom
和ServerRandom
来生成会话密钥,这包括加密密钥、MAC密钥等。