客户端先发起ssl/TLS握手请求,包含用户支持的SSL/TLS版本、加密算法、压缩方法
服务器收到请求后选择双方支持的最高版本SSL/TLS协议、加密算法,生成数字证书发给客户,数字证书包含服务器公钥、证书签名(以证明服务器身份)
客户接受证书后检查签名是否由受信任的CA颁发、证书是否过期、证书中域名是否与访问域名一致,验证通过后从证书中提取服务器公钥
公钥为大家所知,大家都用公钥加密,但只有持有私钥的服务器能解密(此大家非彼大家)
客户生成对称密钥(随机生成,称为预主密钥)然后使用服务器的公钥加密后发送给服务器
其中对称密钥是以双方支持的最高版本加密算法来生成的,前面通过证书通知过双方互相支持的最高版本加密算法
服务器收到公钥加密的数据后使用自己的私钥进行解密,拿到对称密钥
随后客户与服务器传输数据都使用对称加密
传输完毕后客户发送消息以结束传输,服务器释放密钥
欢迎讨论, 如有错误,欢迎斧正