- HTTP的缺点
- 通信使用明文(不加密),内容可能会被窃听
- 加密对象可以是:
- 将通信加密:即使用HTTPS。用SSL建立安全通信线路后,再在这条线路上进行HTTP通信
- 将内容加密:对HTTP协议传输的内容(即HTTP报文内容)本身加密。客户端需要先对HTTP报文进行加密处理后再发送请求,而客户端和服务器需要同时具备加密和解密机制
- 不验证通信方的身份,因此有可能遭遇伪装
- HTTP协议中不会对通信方进行确认,即服务器不管对方是谁都会返回一个响应(除非服务器限制了其IP地址的访问)。因此会出现无意义的请求也会照单全收的问题,导致无法阻止海量请求下的DoS攻击
- 使用SSL查看证书:证书由第三方机构颁发,证明服务器和客户端是真实存在的。所以只要能够确认通信方持有的证书,即可判断通信方的真实意图
- 无法证明报文完整性(即信息的准确度),因此有可能已遭篡改
- 中间人攻击:在请求或响应的传输途中,其内容可能遭到篡改,而HTTP协议是无法确认的。这种称为中间人攻击。
- 数字签名方法:例如文件下载情况,提供下载服务的Web网站会提供相应的以PGP创建的数字签名及MD5算法生成的散列值,客户端需要亲自检查验证下载的文件是否就是原来服务器上的文件,浏览器无法自动帮用户检查。但若PGP和MD5本身被改写,用户是察觉不到的
- 使用HTTPS:SSL提供认证和加密处理及摘要功能
- HTTPS = HTTP + 加密 + 认证 + 完整性保护
- 架构:通常,HTTP直接和TCP通信。而当使用SSL时,变成HTTP先和SSL通信,再由SSL和TCP通信。此外,SSL由于是独立于HTTP的协议,所以其他运行在应用层的协议(如SMTP、Telnet协议等)都可配合SSL协议使用
- 1)SSL的加密:相互交换密钥的公开密钥加密技术,在交换密钥环节使用非对称密钥加密方式,之后的建立通信交换报文阶段使用对称密钥加密方式。这样的好处确保了交换的密钥是安全的前提下,使用效率更高的对称密钥加密方式进行通信
- 2)SSL的认证:证明非对称密钥正确性的证书
- 为什么:不能确认收到的公开密钥就是原本服务器发行的公开密钥,有可能在公开密钥的传输途中被攻击者替换掉了
- 数字证书认证机构(CA,Certificate Authority):是一个客户端和服务器都可信赖的第三方机构。
- 首先,服务器运营人员向CA提出公开密钥的申请。CA在判明申请者的身份后,对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定到一起
- 服务器会将这份由CA颁发的公钥证书发送给客户端,以进行公开密钥加密方式通信。
- 接到证书的客户端可使用CA的公开密钥(多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥),对此证书的数字签名进行验证,验证通过即可确认收到的服务器的公开密钥是值得信赖的
- 接下来,客户端就用服务器的公开密钥对报文加密后发送;而服务器用自己的私钥对报文解密
- EV SSL证书(Extended Validation SSL):是基于国际标准的认证指导方针颁发的证书,严格规定了对运营组织是否真实的确认方针。因此通过认证的Web网站能够获得更高的认可度
- 客户端证书:用以确认客户端是服务器通信的正常客户端。如登录网银时不仅要求用户确认输入ID和密码,还要求用户的客户端证书,以确认用户是否从特定的终端访问网银。存在几处问题:
- 客户端想要获取证书需要自行安装购买(对于一些个人网站来说,买证书并不合算,因此只会选择HTTP的通信方式)
- 客户端证书只能用来证明客户端实际存在,而不能用来证明用户本人的真实有效性。即只要获得了安装有客户端证书的计算机的使用权限,也就同时拥有了客户端证书的使用权限
- 伪造证书:曾经一家荷兰的认证机构就遭到黑客的不法入侵,颁布了
google.com 和twitter.com 等网站的伪造证书事件。因为伪造证书上有正规认证机构的数字签名,所以浏览器会判定该证书是政党的。当伪造的证书被用作服务器伪装时,用户根本无法察觉到 - 自签名证书,OpenSSL:使用OpenSSL开源程序,每个人都可构建一套属于自己的认证机构,从而给自己颁发服务器证书,称为自签名证书。但其无法消除伪装的可能性
- HTTPS的通信步骤:
- 客户端发送
ClientHello 报文开始SSL通信。报文中包含客户端支持的SSL指定版本、加密组件列表(所使用的加密算法及密钥长度等) - 服务器可进行SSL通信时,会以
ServerHellow 报文作为应答。该报文也包含SSL版本、加密组件列表。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的 - 服务器发送
Certificate 报文。其中包含公开密钥证书 - 服务器发送
ServerHelloDone 报文,通知客户端,最初阶段的SSL握手协商部分结束 - SSL第一次握手结束后,客户端以
ClientKeyExchange 报文作为回应。报文中包含通信加密中使用的Pre-master secret 随机密码串(已用步骤三中服务器的公开密钥进行加密) - 客户端继续发送
ChangeCipherSpec 报文。提示服务器,在此报文后的通信会采用Pre-master secret 密钥加密 - 客户端发送
Finished 报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否成功,要以服务器是否能够正确解密该报文作为判定标准 - 服务器同样发送
ChangeCipherSpec 报文 - 服务器同样发送
Finished 报文 - SSL连接建立完成。通信会收到SSL的保护,从此处开始进行应用层协议的通信,即发送HTTP请求
- 应用层协议通信,即发送HTTP响应
- 最后由客户端断开连接。发送
close_notify 报文。最后再发送TCP FIN 报文来关闭TCP的通信 - HTTPS相比于HTTP要慢很多:
- 除去TCP连接、发送HTTP请求及响应之外,HTTPS还要进行SSL通信,因此整体通信量增加
- SSL还必须进行加密处理,在服务器和客户端都要进行加密和解密的运算处理,因此会比HTTP消耗更多的服务器和客户端的硬件资源,导致负载增加
- 认证:确认访问用户的身份
- 认证
- BASIC认证
- DIGEST认证
- SSL客户端认证
- 基于表单认证
|