HTTPS与SSL/TLS协议
HTTPS(Hypertext Transfer Protocol Secure)译为超文本传输安全协议,也称为HTTP over TLS,HTTP over SSL或HTTP Secure,它对HTTP协议进行的扩展,用于在计算机网络上进行安全通信。其主要目的是对站点服务器进行身份认证,保护交换数据的隐私与完整性。 SSL/TLS协议 HTTP协议位于TCP/IP四层模型最高层的应用层。HTTPS是在HTTP所在的应用层加入一个子层,位于HTTP子层之下,传输层之上。 根据RFC: TLS协议的主要目的是为两个通信应用间提供隐私与数据完整性。该协议主要由两层组成:TLS Record协议和TLS Handshake协议。在某个稳定的传输协议(如TCP)之上,在最底层是TLS Record协议。 TLS Record协议所提供的连接安全性有两个基本属性: 连接是私有的。 对称加密用于数据加密(例如AES, RC4等),每个连接都会生成唯一的对称加密秘钥,并且该秘钥是基于另一个协议(例如TLS Handshake协议)经过协商后的秘钥得来的。Record协议也可以不使用加密。 连接是可靠的。 消息传输包含一个使用一个使用秘钥的MAC的消息完整性检查。安全哈希函数(例如,SHA-1等)用于MAC计算。Record协议可以不使用MAC进行运行,但这种情况通常仅使用在这种模式下,即另一个协议将Record协议作为协商安全参数的传输器。 TLS Record协议用于封装更高层级的协议。其中一个就是TLS Handshake协议,它允许服务器和客户端对彼此进行认证并且在应用层协议传输和接收数据的第一个字节前协商一个加密算法以及要使用的秘钥。 TLS Handshake协议提供的连接安全性有三个基本性质: 对等端的身份可以使用非对称加密或公钥密码学(如,RSA,DSA等)进行认证,这种认证是可选的,但一般需要对等端至少一方进行认证。 对共享秘钥的协商是安全的:协商的秘钥是不能被窃听者获取的,并且对任意未认证的连接都不能获取到秘钥,即使攻击者位于连接的中间。 协商是可靠的:没有攻击者能够修改协商通信内容并且不被通信方发现。 TLS的一项优点是它是与应用协议独立的,更高层级的协议可以透明地置于TLS协议之上。TLS标准并没有指定什么协议可以使用TLS来添加安全性,如何初始化TLS握手以及如何解释认证证书交换的决定留给TLS之上的协议的设计者和实现者。 HTTPS连接的建立与加密通信 在实现中,SSL/TLS子层作为HTTP子层和传输层的中间层,对套接字接口进行了一层封装,用于建立安全连接与通信。会话状态的加密参数是通过TLS握手协议来生成的,当一个TLS客户端和服务端首次开始进行通信时,它们在一个协议版本上达成一致、选择密码学算法、可选地对对方进行认证,并使用公钥加密技术来生成共享秘钥。 它包含如下步骤: 交换hello消息来对算法达成一致,交换随机值并进行恢复会话的检查 交换必要的机密参数,运行客户端和服务端对预主密钥(premaster secret)达成一致 交换证书和密码学信息,允许客户端和服务端对彼此进行认证 从预主密钥(premaster secret)生成一个主密钥并交换随机值 为Record层提供安全参数 允许客户端和服务端确认它们的对等端计算出相同的安全参数并且握手没有被攻击者干预 TLS握手的完整步骤如下所示(其中带*表示可选的或根据情况进行发送的消息,并不总是会发送): Client Server ClientHello --------> ServerHello Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDone Certificate* ClientKeyExchange CertificateVerify* [ChangeCipherSpec] Finished --------> [ChangeCipherSpec] <-------- Finished Application Data <-------> Application Data 可以使用openssl提供的工具来查看这一步骤的实际数据交换情况:...