HTTP协议中有可能存在信息窃听或身份伪装等安全问题。使用HTTPS通信机制就可以有效地防止这些问题。
- HTTP的缺点
(1) 通信使用明文(不加密),内容可能被窃听
HTTP 本身不具备加密的功能,所以也无法做到对通信整体(使用HTTP协议通信的请求和响应的内容)加密。即、HTTP报文使用明文方式发送。
按TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。可以通过抓包嗅探工具(Fidder,Wireshark、sniffer、nmap等工具)来解析内容。
(2) 不验证通信方的身份,因此有可能遭遇伪装
(IP端口没有被封锁过滤)服务器只要接受到请求,都会返回一个响应。
不确认通信方,会存在一些隐患:
伪装的WEB服务器、已伪装的客户端、无法确定正在通信的对象是否具有访问权限、无意义的请求也会接受(DDOS攻 击)
(3) 无法证明报文的完整性,所以有可能已遭篡改
HTTP 本身不具备加密的功能,所以也无法做到对通信整体(使用HTTP协议通信的请求和响应的内容)加密。即、 HTTP报文使用明文方式发送。报文可能会遭到攻击者拦截并篡改内容(中间人攻击,Man-in-the-Middle attack)
- 加密分为通信的加密和内容的加密
(1) 通信的加密
HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer, 安全套接层)或TLS(Transport Layer Security, 安全传输协议)的组合使用,加密HTTP的通信内容。用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)
(2) 内容的加密
由于HTTP协议中没有加密机制,那么就对HTTP协议传输的内容本身加密。即将HTTP报文中所含内容进行加密处理。
- HTTPS采用混合加密机制
加密分为对称密钥加密(也叫共享密钥加密、加密和解密同用一个密钥的方式)、非对称密钥加密(也叫公开密钥加密,私钥是自己保留用来解密,公钥可以随意发布,任何人都可以获得将自己要传递的消息通过公钥加密传送给你,你用私钥解密,常见的如RSA加密,采用大质数加密原理加密)
公开密钥处理起来比共享密钥加密方式更为复杂,因此若在通信时使用公开密钥加密方式,效率很低,因此采用混合加密
(1) 使用公开密钥加密方式安全地交换在稍后的共享密钥加密中要使用的密钥
(2) 确保交换的密钥是安全的前提下,使用共享密钥加密方式进行通信
- 如果正准备和某台服务器建立公开密钥加密方式下的通信时,如何证明收到的公开密钥就是原本预想的那台服务器发行的
公开密钥,或者可能传输中被篡改了?
可以使用由数字证书认证机构(CA, Certificate Authority)和其相关机构颁发的公开密钥证书
(1) 服务器生成公钥和私钥,把自己的公开密钥登陆至数字证书认证机构
(2) 数字证书认证机构用自己的私有密钥向服务器的公开密码部署数字签名并颁发公钥证书
(3) 数字证书认证机构的公开密钥已事先植入到浏览器里了(浏览器选项->Internet选项->内容->证书)
客户端拿到服务器的公钥证书后,使用数字证书认证机构的公开密钥,向数字证书认证机构验证公钥证书上的数字签
名,以确认服务器的公开密钥的真实性
(4) 使用服务器的公开密钥对报文加密后发送
(5) 服务器用自己的私有密钥对报文解密
- SSL为什么大多只有在银行、电商等网站才使用?
(1) 节约购买证书的开销
(2) HTTPS建立加密通信消耗更多的CPU和内存资源,建立连接也慢,因此非敏感信息则使用HTTP通信,只有包含个人信息等敏感数据时,才利用HTTPS加密通信。