声明:本人的所有博客皆为个人笔记,作为个人知识索引使用,因此在叙述上存在逻辑不通顺、跨度大等问题,希望理解。分享出来仅供大家学习翻阅,若有错误希望指出,感谢!
HTTP的缺点
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,有可能遭遇伪装
- 无法证明报文的完整性,有可能被篡改
通信使用明文可能被窃听
通信内容在所有通信线路上都有可能遭到窥视
如果通信经过加密,就有可能让人无法破解报文信息,但加密后的报文信息本身还是会被看到
通信的加密
- 使用SSL(安全套接层)或TLS(安全传输层协议)加密HTTP通信
- 用SSL建立安全通信线路后,就可以在这条线路上进行HTTP通信了,与SSL组合使用的HTTP被称为HTTPS
内容的加密
- 将参与通信的内容本身进行加密
- 由于该方式不同于SSL直接对整个通信线路进行加密,所以内容仍有被篡改的风险
不验证通信方的身份就可能遭遇伪装
任何人都能发起请求
- 在HTTP通信时,由于不存在确认通信方的处理步骤,任何人都能发起请求
查明对方的证书
- 虽然使用HTTP协议无法确定通信方,但如果使用SSL则可以
- SSL不仅提供加密处理,还使用了“证书”作为确定通信方的手段
证书由值得信赖的第三方机构颁发,用以证明服务器和客户端是实际存在的
伪造证书从技术角度来说是一件异常困难的事
无法证明报文的完整性,可能已被篡改
没有任何办法确认,发出的请求/响应和接收到的请求/响应是前后相同的
防止篡改
- 常用MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法
- 这些方法依然无法百分百保证确认结果的正确性
- 仅靠HTTP确保完整性是非常困难的,需要配合其他协议,例如SSL
HTTPS
HTTPS=HTTP+加密+认证+完整性保护
HTTP并非是一种新协议,只是HTTP通信接口部分用SSL和TLS协议替代而已
通常HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信
密钥加密技术
SSL采用公开密钥加密方式
近代加密方法中加密算法是公开的,而密钥却是保密的。加密和解密都会用到密钥,没有密钥就无法对密钥解密。如果密钥被攻击者获得,那密钥就失去了意义
共享密钥加密
- 加密和解密用同一个密钥的方式称为共享密钥加密
- 以共享密钥加密时必须将密钥也发送给对方,将密钥安全的传输给对方是一个难以解决的问题
公开密钥加密
- 公开密钥加密使用一对非对称的密钥,一把叫做私有密钥,一把叫做共开密钥,私有密钥不能让任何人知道,而公开密钥可以随意发布
- 发送密文的一方使用对方的公开密钥进行加密,对方收到被加密的信息后,再使用自己的私有密钥进行解密
- 利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走
HTTPS采用混合加密方式
- HTTPS采用共享密钥加密和公开密钥加密两种方式并用的混合加密机制
- 在交换密钥环节使用公开密钥加密方式,之后建立通信交换报文阶段使用共享密钥加密方式
公开密钥加密处理起来比共享密钥加密方式更复杂,因此若在通信时使用公开密钥加密方式,效率就很低
证明公开密钥正确性的证书
证书是由权威的第三方机构签发的,用于验证公开密钥的真实性,确保公开密钥没有被篡改
公开密钥+数字签名的运作方式如下:
- 服务器把自己的公开密钥登录至数字证书认证机构
- 数字证书认证机构用自己的私有密钥向服务器的公开密钥部署数字签名并颁发公钥证书
- 客户端拿到服务器的公钥证书后,使用数字证书认证机构的公开密钥,向数字证书认证机构验证公钥证书上的数字签名,以确定服务器公开密钥的真实性
- 使用服务器的公开密钥对报文加密后发送
- 服务器用私有密钥对报文解密
EV SSL证书
- 证书的一个作用是用来证明作为通信方的服务器是否规范,另外一个作用是可确认对方服务器背后运营的企业是否真实存在。
- EVSSL证书是基于国际标准的认证指导方针颁发的证书。因此,通过认证的Web网站能够获得更高的认可度(持有EVSSL证书的Web网站的浏览器地址栏处的背景色是绿色的)
客户端证书
-
HTTPS中还可以使用客户端证书。以客户端证书进行客户端认证,证明服务器正在通信的对方始终是预料之内的客户端,其作用跟服务器证书如出一辙
-
客户端证书仍存在几处问题点。其中的一个问题点是证书的获取及发布。想获取证书时,用户得自行安装客户端证书。但客户端证书是要付费购买的
-
客户端证书存在的另一个问题点是, 客户端证书只能用来证明客户端实际存在,而不能用来证明用户本人的真实有效性
自签名证书
- 由自认证机构颁发的证书称为自签名证书
- 如果使用OpenSSL这套开源程序,每个人都可以构建一套属于自己的认证机构,从而自己给自己颁发服务器证书。但该服务器证书在互联网上不可作为证书使用,浏览器访问该服务器时,会显示“无法确认连接安全性”或“该网站的安全证书存在问题”等警告
HTTPS安全通信机制
- 客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件列表(所使用的加密算法及密钥长度等)
- 服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的
- 之后服务器发送Certificate报文。报文中包含公开密钥证书
- 最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束
- SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为
Pre-master secret的随机密码串。该报文已用步骤3中的公开密钥进行加密 - 接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret
密钥加密 - 客户端发送 Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准
- 服务器同样发送Change Cipher Spee报文
- 服务 器同样发送Finished报文
- 服务器和客户端的Fistled报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求
- 应用层协议通信,即发送HTTP响应
- 最后由客户端断开连接。断开连接时,发送close noify报文
以上流程中,应用层发送数据时会附加一种叫做MAC的报文摘要,MAC能够查知报文是否遭到篡改,从而保护报文的完整性
SSL缺点
- HTTPS由于使用了SSL,因此速度不如HTTP
- SSL的慢分两种,一种是指通信慢,另一种是指由于大量消耗CPU及内存资源(用于加密解密处理运算),导致处理速度变慢
为什么不一直使用HTTPS
- 与纯文本通信相比,加密通信会消耗更多的CPU及内存资源
- 购买证书也是一笔开销