HTTP学习笔记(五)

275 阅读6分钟

一、什么样的通信是安全的?

因为HTTP是不安全的, 所以才有了HTTPS的出现, 那么什么样的通信才是安全的呢?

  • 机密性: 指对数据保密, 只有通信的人可以访问识别, 其他人不可见
  • 完整性: 表示数据在传输过程中没有被篡改(增加或减少)
  • 身份认证: 表示通信双方可以确定对方的是自己要通信的对象, 保证消息发送给正确的人
  • 不可否认: 表示发送过数据后不能否认自己发送过 同时具备了以上4个特性, 通信双方的利益能保障, 才算是真正的安全

二、HTTP与HTTPS的区别

相同点:

  • 两者有都采用请求应答模式
  • HTTPS的报文结构,请求方法, 链接管理等都与HTTP相同 不同点:
  • 2者的协议名不同, 分别http 和 https 协议
  • 默认端口号分别为 80 和 443
  • HTTP下层紧挨着TCP层, HTTPS中HTTP下层紧接着SSL/TLS层, 然后才是TCP层

三、SSL/TSL和OpenSSL

SSL即安全套接层(Secure Sockets Layer), 处在OSI中的会话层. 由网景公司1994年发明, 与1999年, 由互联网工程组更名为TSL(传输层安全, Transport Layer Security), 正式标准化

TLS由记录协议, 握手协议, 警告协议, 等几个子协议组成, 综合使用了对称加密, 非对称加密, 身份认证等技术

OpenSSL是开源密码学程序库和工具包, 支持了所有公开的加密算法和协议, 许多软件都会将他作为底层库来实现TLS

四、对称加密和非对称加密

  • 对称加密 加密和解密信息使用的秘钥是同一个, 就成为对称加密. 如 DES, AES等加密算法

优点: 加密算法效率高, 通信效率高
缺点: 在通信双方交换秘钥时, 非常容易被其他人获取, 那么传输的数据就可能会被其他人截取. 安全性低

  • 非对称加密 加密和解析信息使用的秘钥不是同一个, 成为非对称加密. 如RSA, ECC等加密算法

每个节点都有2个秘钥, 公钥和私钥. 这2个秘钥是不同的, 公钥可以给开给任何人使用, 私钥需要自己秘密保存. 公钥和私钥具有单向性, 虽然都可以用来加密解密, 但是公钥加密后的数据只有对应的私钥可以解密, 私钥加密后的数据只有对应的公钥可以解密, 非对称加密可以解决秘钥交换的问题. 所以非对称加密又被成为"公钥加密算法"

优点: 假设私钥不会被其他人获取到, 非对称加密会非常安全
缺点: 交换公钥等操作让非对称加密效率非常低, 导致通信效率低

  • 混合加密

将对称加密和非对称加密结合起来, 取长补短, 既可以高效的加密解密, 也可以安全的进行秘钥交换. 目前的TSL就是使用的这种模式

通信开始时, 使用非对称加密双方将秘钥交换, (A使用自己的私钥, 将秘钥串加密, B使用A的公钥进行解密得到秘钥串, 同样的, B使用自己的私钥将秘钥串加密, A使用B的公钥对秘钥串进行解密.) 这样就解决了秘钥交换过程中被其他人截取的危险. 交换秘钥以后, 双方使用对称加密进行后续的通信. 这样后续的通信的性能就不会因为加密解密变差

加密算法保证了通信过程中的机密性

五、摘要算法

摘要算法也就是通常说的散列函数、哈希函数. 主要作用是通过特殊的压缩算法, 将任意长度的数据压缩成固定长度, 并且独一无二的字符串. 同样, 摘要算法也是单向的, 根据加密后的数据是无法逆推出原文的常见的有, MD5, SHA-1, SHA-2等. 前2个因为生成的长度太短, 安全度比较低已被TSL弃用.

相同的源数据, 不管何时何地, 使用相同的摘要算法得到的值都是一样. 这样只要将源数据以及摘要同时发给对方, 对方使用同样的摘要算法计算源数据后在与摘要进行比对, 就能验证源数据的完整性.

摘要算法保证了通信过程中数据的完整性

六、数字签名

通过加密算法和摘要算法, 我们保证了机密性和完整性, 通信过程可以说是比较安全了, 但是还是有漏洞, 就是身份认证和不可否认. 黑客可以伪装成目标网站来窃取你的信息, 同时也可以伪装成你与网站进行通信, 网站无法确认你的身份, 这样消息就十分不安全.

数字签名与公钥加密是反向的过程. A将摘要用自己的私钥进行加密(签名), 并且同时将摘要和数字签名都发送给B, B使用A的公钥对数字签名解密, 将摘要和解密的数字签名进行比对(验签). 因为摘要是通过A的私钥进行签名的, 又通过A的公钥进行解密并比对成功, 所以就可以认为A就是消息的发送者(用你给的钥匙打开了你给的锁, 所以这个锁肯定是你的. 钥匙或锁不对, 都不可能将锁打开).

数字签名就可以同时解决身份认证和不可否认2个问题

七、数字证书和CA

有了加密算法, 摘要算法, 数字签名, 我们可以保证数据通信的足够安全, 但是这个前提是, 我们信任对方给我们的公钥, 如果公钥本身就是黑客给我们的, 那么我们后边的一系列操作就也随之无效. 这就是数字证书的作用, 而CA是数字证书的签发机构

证书签发机构会将公钥, 颁发者,系列号等一系列数据打包成"数字证书", 我们在通信前会进行数字证书的验证, 通过一层层CA机构信任链来验证证书, 信任链的最终是根证书, 我们需要无条件信任根证书, 否则就会进入死循环了.

有了数字证书信任的公钥, 我们的安全通信终于可以完成了

系列目录

HTTP学习笔记(一)

HTTP学习笔记(二)

HTTP学习笔记(三)

HTTP学习笔记(四)

HTTP学习笔记(五)

HTTP学习笔记(六)