简介
http(HyperText Transfer Protocol)作为常用的应用层协议,在使用中信息是以明文传输的,很容易发生信息被“嗅探”。为了应对http协议使用中可能发生的攻击,于是诞生了https,从名字可以看出,是对http协议的一个封装,主要提供以下功能:
1.对信息加密。防止信息被非法捕获、泄露
2.完整性校验。检测信息的完整性,防止信息被篡改
3.身份认证。解决信息伪造问题,验证通信方的身份合法性
HTTPS可以看成HTTP+SSL/TSL,即http over ssl,在ssl(secure sockets layer)被广泛使用之后,形成了一个规范更名为tls(transport layer security)。相当于在应用层的http和传输层的tcp之间,加了一个tls验证过程。
HTTPS原理
https的过程可以归结为一句话:使用非对称加密算法完成密钥协商,利用协商的密钥进行信息传输的对称加密。
身份合法性验证
引入证书完成对通信方身份的验证,防止冒充现象发生。网站服务器向CA(certificate authentication)证书授权机构,出点钱,买个证书,客户端操作系统或浏览器内置有根证书,用以检测网站服务器证书的合法性。
证书合法性检测过程使用的是数字签名方式:
1.对签名内容进行哈希运算,生成消息摘要,利用CA私钥对消息摘要进行加密,证书内容保留有签名内容和加密后信息
2.客户端使用CA公钥解密出消息摘要,对证书签名内容进行哈希运算后与消息摘要比较,相同则认为校验成功
示例图如下:
此处需要注意一点:
证书校验过程中使用的公私钥对是CA拥有的,跟证书的申请者,网站服务器无关。这里说明是因为,网站服务器在提交证书申请时需要提供自己的公私钥对,用于后续的ssl密钥协商过程。
https密钥协商过程
(只保留主要部分)
第一步:客户端选择随机数client_random,hash算法,发送给服务器
第二步:服务器选择随机数server_random,由客户端确定的hash算法,包含自己公钥的证书,发送给客户端
第三步:验证证书,通过选择随机数pre_master并以服务器公钥加密;计算master_key=PRF(client_random,server_random,pre_master),hash计算握手信息,以master_key加密;发送给服务器
第四步:私钥解密出pre_master,计算出master_key,解密握手信息,hash运算检测是否与之一致
此处没有对客户端进行证书认证,在某些局域网内部可能需要对访问网络的客户端进行认证,检测是否允许访问,则在第三步发送给服务器的信息中需要包含有客户端的证书(可能存在会话劫持)。
总结
在会话中使用非对称加密算法完成密钥的协商,而不是使用对称加密进行信息传输,主要在于维护大量密钥负载较大,并且使用相同的密钥进行多次会话不安全。https主要用在网站登陆以及一些支付操作中,不过在一些企业中已经正式修改为https了,百度、淘宝的页面打开之后都可以发现默认使用https访问。
设计https的一个难点在于,在协商出密钥之前,即握手过程中传递参数,如何保证安全性,因为此时的信息传输是以明文的方式进行的,此处引入证书解决该问题。在2009年由N.Chandran,V.Goyal,R.Moriarty和R.Ostrovsky提出的基于位置密码学中,提供了一种新的思路,将通讯方的位置信息作为身份验证的参数,利用时间响应性来判断身份的合法性。当然目前尚处于理论阶段,参见《可证明安全的基于位置P2P密钥交换协议》