1.什么是Http
Http中文叫做超文本传输协议, 它完成客户端到服务端等一系列运作流程
1.1 与http关系密切的协议: IP, TCP和DNS
负责传输的IP协议
IP协议数据网络层, IP协议的作用是把各类数据包传送给对方. 而要确保确实传送到对方那里, 则需要满足各类条件. 其中两个重要的条件是IP地址和MAC地址.
IP地址指明了节点被分配到的地址, MAC地址是指网卡所指的固定地址. IP地址和MAC地址进行配对, IP地址可以变换, 但是MAC地址基本不会更改.
确保可靠性的TCP协议
TCP位于传输层, 提供可靠的字节流服务
字节流服务: 为了方便传输, 将大块数据分割成以报文段为单位的数据包进行管理.
为了确保无误将数据送达目标处, TCP协议采用了三次握手策略.当然除了三次握手策略, 还有很多其他的手段保证通讯的可靠性
负责域名解析的DNS服务
DNS服务是和HTTP协议一样位于应用层的协议. 他提供域名与IP地址之间的解析服务.
因为记住一组纯数字太难了, 而字母加数字才是人类习惯的方式,为了解决这个问题, DNS服务营运而生.
2. HTTP的缺点
通信使用明文(不加密), 内容可能会被窃听
不验证通信方的身份, 因此有可能遭遇伪装
无法证明报文的完整性, 所有有可能已遭篡改
3.HTTP+加密+认证+完整性保护 = HTTPS
HTTPS并非是应用层的一种新协议. 只是HTTP通信接口部分用SLL(Secure Socket Layer)和TLS (Transport Layer Security) 协议替代而已.
通常, HTTP直接和TCP通信, 当使用SSL时, 演变成了先和SSL通信, 再由SSL和TCP通信了, 简而言之, 所谓HTTPS, 其实就是身披SSL协议的这层外壳的HTTP.
在采用SSL后, HTTP就拥有了HTTPS的加密, 证书和完整性的保护这些功能.
SSL是独立于HTTP的协议, 所有不光是HTTP协议, 其他运行在应用层的SMTP(邮件协议)和Telnet等协议均可配合SSL协议使用. 可以说SSL是当今世界上应用最广泛的网络安全技术.
4.SSL是如何加密的
SSL采用一种叫做公开密钥加密(Public-key cryptography)的加密方式.
近代的加密方法中, 加密算法是公开的, 而秘钥是保密的, 通过这种方式得以保持加密方法的安全性.
共享密钥加密的困境
加密和解密同用一个密钥的方式称为共享密钥加密, 也被叫做对称密钥加密.
共享加密方式加密时必须将密钥也发给对方. 在互联网上转发密钥时, 如果通信被监听那么密钥就会落入攻击者之手, 同事也就失去了加密的意义,
怎么才能安全的转交?
使用两把密钥的公开密钥加密
公开密钥加密方式很好地解决了共享密钥加密的困难
公开密钥加密使用一对非对称的密钥. 一把叫做私有密钥, 另一把叫做公开密钥
使用公开密钥加密方式, 发送密文的一方使用对方的公开密钥进行加密处理, 对方收到被加密的信息后, 在使用自己的私有密钥进行解密. 利用这种方式, 不需要发送用来解密的私有密钥, 也不用担心密钥被攻击者窃听而盗走.
另外, 要想根据密文和公开密钥, 恢复到信息原文是异常困难的, 因为解密过程就是在对离散对数进行求值, 这并非轻而易举就能办到的. 退一步讲, 如果能对一个非常大的整数做到快速地因式分解, 那么密码还是在存在希望的, 但就目前的技术来看是不太现实的.
HTTPS采用混合加密机制
HTTPS采用共享秘钥加密 和 公开秘钥加密两者并用的混合加密机制. 若密钥能够实现安全交换, 那么有可能会考虑仅适用公开密钥加密来通信. 但是公开密钥加密和共享密钥加密相比, 其处理速度要慢.
所以应充分利用两者各自优势, 将多种方法组合起来用于通信. 在交换密钥环节适用公开密钥加密方式, 之后的建立通信交换报文阶段则使用共享密钥加密方式.
5.证明公开密钥的正确性的证书
遗憾的是, 公开密钥加密方式还是存在一些问题的, 那就是无法证明公开密钥本身就是货真价实的公开密钥. 比如, 正准备和某台服务器建立公开密钥加密方式下的通信时, 如何证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥. 或许在公开密钥传输途中, 真正的公开密钥已经被攻击者替换了.
为了解决上述问题, 可以使用有数字证书认证机构和其他相关机关颁发的公开密钥证书
基本流程为:
- 1.服务器把自己的公开密钥登录至数字证书认证机构
- 2.数字证书认证机构用自己的私有密钥向服务器的公开密钥署数字签名并颁发公钥证书
- 3.客户端拿到服务器的公钥证书后, 使用数字证书认证机构的公开密钥, 向数字证书认证机构验证公钥证书上的数字签名, 以确认服务器的公开密钥的真实性
- 4.使用服务器的公开密钥对报文加密后发送
- 5.服务器用私有密钥对报文解密
6.SSL速度慢吗?
由于HTTPS还需要做服务器,客户端双方加密及解密处理, 因此会消耗CPU和内存等硬件资源, 和HTTP通信相比, SSL通信部分消耗网络资源. 而SSL通信部分, 有因为要对通信进行处理, 所有时间上又延长了.
针对速度慢这样一个问题, 并没有根本性的解决方案, 我们会使用SSL加速器这种(专用服务器)硬件来改善该问题. 相对软件来讲, 能够提高数倍SSL计算速度.
7.为什么不一直使用HTTPS
既然HTTPS那么的可靠安全, 那为何不所有的Web网站不一直使用HTTPS?
其中的一个原因是, 因为与纯文本通信相比, 加密通信会消耗更多的CPU资源以及内存资源, 如果每次通信都加密, 会消耗相当多的资源, 平摊到一台计算机上时, 能够处理的请求数量必定会随之减少.
因此, 如果是非敏感信息则使用HTTP通信, 只有在包括个人信息等敏感数据时, 才利用HTTPS加密通信, 以节省资源. 除此之外, 想要节约购买证书的开销也原因之一.