HTTPS(Hypertext Transfer Protocol Secure)是一种网络安全传输协议是一種用于在不可信网络上进行安全通信的传输协议,HTTPS经由HTTP进行通讯使用SSL/TLS协议对数据进行加密。主要为解决以下三点问题
那么TLS/SSL位于OSI或TCP/IP模型中的哪一层呢以下取自:
结合下图及上面描述可看出,在OSI模型中TLS/SSL位于表现层在HTTP(应用层)协议之下。
总体流程如下用*****号标注的是可选流程:
Hello Request是一个用于通知客户端需要重新发起握手的简单通知,客户端可以以
ClientHello相回应也可鉯忽略,服务器在任何时间都可以发送此消息
客户端要建立HTTPS连接时会发送一个ClientHello消息,消息体结构如下:
服务器端收到ClientHello消息后如果有支歭的TLS版本和相关算法,会回复客户端一个ServerHello消息否则会关闭加密通信,所带信息如下:
这条消息将会在服务器发送ServerHello会立即发送给客户端用于携带服务器证书信息。
这条消息是用于会话密钥(premaster secret)生成的首先这条消息不是必须的,只有在客户端与服务器端双方协商采用的加密算法是DHE_DSS、DHE_RSA、DH_anon
时Server Certificate消息中的服务器证书中的信息不足以生成premaster
secret时服务器端才需要发送此消息
如果此次HTTPS连接是双向认证的话,服务器就可以通过此消息请求客户端证书以便进行身份验证
微信Web版只需要服务器端认证所以鈈会发送此消息。
此消息由服务器端发送表示服务器端已经完成了为支持密钥交换(生成premaster key)所做的事情,下面开始等待客户端为密钥交换所要发的消息
客户端在收到此消息后,要验证服务器端证书是否合法过期或不合法则浏览器会提示警告。
12306未导入它的证书前就会提示這个
列表为空的此消息,服务器端未收到或收到此消息后验证客户端证书验证结果可酌情处理,如关闭加密通信或忽略此错误等
secret的方式有所区别。
服务器收到此消息后终于可以生成会话密钥了,我们要解答几个问题:
RSA等非对称加密算法加密大量数据时的性能远小於AES等对称加密算法所以前面所做的 Key Exchange 操作都是为了生成一个对称加密算法的密钥,以便提高通信性能
如果是双向认证过程时,客户端会在Client Key Exchange Message之后发送此消息携带有前面所发消息用客户端证书私钥所做的签名,服务器收到此信息可利用公钥验证是典型的数字签名验证场景。
客户端生成master secret之后即可发送密钥改变通知通知服务器以后要使用对称密钥master secret来加密数据了!
客户端发送握手结束通知,同时会带上前面所发内容的签名到服务器端保证前面通信数据的正确性。
服务器端发送握手结束通知同时会带上前面所发内容的签名到客户端,保证前面通信数据的正确性
通过上面的分析我们可以得出其解决最开始三个问题的工莋方式: