确保Web安全的HTTPS
HTTP存在三个比较明显的缺点:
通信使用明文(不加密),内容可能会被窃听。
不验证通信方的身份,因此有可能遭遇伪装。
无法证明报文的完整性,所以可能已遭篡改。
尽管HTTP协议中没有加密机制,但可以通过和SSL或TLS的组合使用加密HTTP的通信内容,组合在一起通常被称为HTTPS。
HTTP协议在通信过程会存在以下隐患:
无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器,有可能是已伪装的Web服务器。
无法确定响应返回到的客户端是否是按真实意图接受响应的那个客户端,有可能是已伪装的客户端。
无法确定正在通信的对方是否具备访问权限,因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限。
无法判断请求是来自何方,出自谁手。
即使是无意义的请求也会照单全收,无法阻止海量请求下的Dos攻击(拒绝服务攻击)。
请求或响应内容可能会在传输途中遭攻击者拦截并篡改内容。
HTTPS即使HTTP加上加密处理和认证以及报文完整性保护(完整性是指信息的准确度),其通信层次区别如图:
SSL采用一种叫做公开密匙加密的加密处理方式,其加密算法是公开的,但密匙是保密的,加密和解密过程中都需要用到密匙。
加密和解密同用一个密钥的方式称为共享密钥加密,也叫做对称密钥加密。
公开密钥加密使用一对非对称的密钥,一把叫做私有密钥,另一把叫做公开密钥,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何都可以获得,使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到加密的信息后,再使用自己的私有密钥进行解密,这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走,其整个过程如图:
HTTPS结合上面两种加密方式采用混合加密机制,因为公开密使加密处理比共享密匙加密方式更复杂,效率较低,结合两者的优势,HTTPS在交换密匙环节使用公开密钥加密方式,之后的建立通信交换报文加段则使用共享密钥加密方式,过程如图:
为了认证你访问的服务器就是原本预想的那台服务器,这就需要客户端和服务器双方都可信赖的第三方机构——数字证书认证机构,服务器会将这份由数字认证机构颁发的公钥证书(也叫数字证书)发送给客户端,以进行公开密钥加密方式通信,接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书书上的数字签名进行验证,以但验证通过,就说明服务器的公开密钥是值得信赖以及服务器是你预想访问的那个服务,其整个过程如图:
HTTPS通信大致步骤如下:
客户端通过发送Client Hello报文开始SSL通信,报文中包含客户端支持的SSL的指定版本,加密组件列表。
服务器可进行SSL通信时,会以Sever Hello报文作为响应,和客户端一样,在报文中包含SSL版本以及加密组件,服务器的加密组件内容是从接收到的客户端加密组件内选帅出来的。
之后服务器发送 Certificate报文,报文中包含公开密钥 证书。
最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应,报文中包含通信加密中使用的一种称为Pre-master secret的随机密码串,其过程用了来自服务器公开密钥进行加密。
接着客户单继续发送Change Cipher Spec报文,该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。
客户端发送Finished报文,该报文包含连接至今全部报文的整体校验值,这次握手协商是否成功,要以服务器是否能够正确加密该报文作为判定标准。
服务器同样发送Change Cipher Spec报文。
服务器同样发送Finished报文。
服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成,当然,通信会受到SSL的保护,从此处开始进行应用层协议的通信,即发送HTTP请求。
应用层协议通信,即发送HTTP响应。
最后由客户端断开连接。