SSL/TLS是传输层协议,也就是说,这两个协议与TCP/UDP是同级的。但是在底层实现上,SSL/TLS都是基于TCP协议的。‘’
SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。
普通级别的保护,是服务器需要向用户证明自己的身份,而客户端无需向服务器证明自己的身份,这个过程是通过数字证书完成的,每个提供服务的服务器需要申请一张由系统内置的证书颁发机构颁发的证书证明自己的身份,来保证连接时数据传输到了合理合法的服务器上。对于银行这种,需要验证客户端是否合法的情景,需要客户端插入一张保存了银行派发的证明客户端的U盘来完成这个任务。
SSL/TLS握手的时候使用的是非对称加密,速度相对比较慢,为了减少计算耗时,在握手完成之后,就会切换到对称加密状态。对称加密的秘钥叫做“对话秘钥”(session key),每个session生成一次,通过握手的时候生成的三次随机数完成的。
握手的四次过程如下
- 客户端发出请求(ClientHello)。这一过程客户端需要发送自己的这些信息:
包含协议和加密方式的密码套件,类似这样:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 的组合集合
支持的压缩方式
一个用于稍后生成对话秘钥的随机数
- 服务器回应(ServerHello)。这一过程服务器需要发送自己的这些信息:
从密码套件中选出一个自己和客户端都支持的,作为确定信息发回
一个用于稍后生成对话秘钥的随机数
服务器证书
- 客户端回应
客户端用操作系统内置的证书来检验服务器发送的证书是否有效,如果有效,则信任这是合法的服务器。
客户端再次产生一个随机数,用服务器的证书中的公钥加密,发送给服务器
客户端发送握手结束通知,表示握手结束
- 服务器最后回应
服务器用私钥解密客户端发送过来的随机数,生成pre-master key,用于接下来的对称加密。
服务器发送编码改变通知,表明下面使用协商的加密和秘钥传送信息
服务器发送握手结束通知,表示SSL/TLS握手结束。
接下来客户端和服务器进入加密通信,其内部是普通的应用层协议。由于SSL/TLS是传输层协议,因此完全兼容。HTTPS,POP3,SMTP都可以在上边跑。
参考链接:
http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
https://www.jianshu.com/p/c93612b3abac