拜伦的博客

Coder Byron

这里有关于iOS,机器学习的笔记心得,欢迎交流


深入理解HTTPS

目录

What

HTTPS在传统的HTTP和TCP之间加了一层用于加密解密的SSL/TLS层(安全套接层Secure Sockets Layer/安全传输层Transport Layer Security)层。使用HTTPS必须要有一套自己的数字证书(包含公钥和私钥)。

Why

HTTP的问题

  • 不加密,通信是明文,可能被窃听
  • 无法证明报文的完整性,可能被篡改
  • 没验证通信方的身份,可能遭遇中间人伪装

HTTPS解决的问题

  • 信息加密传输:第三方无法窃听;
  • 校验机制:一旦被篡改,通信双方会立刻发现;
  • 身份证书:防止身份被冒充。

How

如何加密

哈希加密

哈希算法加密是通过哈希算法对数据加密,加密后的结果不可逆,即加密后不能再解密。 特点: 不可逆、算法公开、相同数据加密结果一致。 作用: 信息摘要,信息“指纹”,用来做数据识别的。如:用户密码加密、文件校验、数字签名、鉴权协议。

对称加密

加密和解密同用一个密钥。没有密钥就无法对密码解密,反过来说,任何人只要持有密钥就能解密了。对称加密有很多种算法,常用的有AES, DES。由于它效率很高,所以被广泛使用在很多加密协议的核心当中。

    encrypt(明文,秘钥) = 密文
    decrypt(密文,秘钥) = 明文

优点: 相对于非对称加密,加解密效率高得多,加密速度块。 缺点: 对于秘钥的管理和分发上比较困难,秘钥管理负担重。

非对称加密

指的是加、解密使用不同的密钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥只能由一方安全保管,不能外泄,而公钥则可任意发布给需要的人。 非对称RSA有2种用法:

  1. 加解密 公钥加密,私钥解密是普通的方式
  2. 数字签名 私钥签名(加密),公钥验证(解密)是数字签名,防止中间人冒充
    encrypt(明文,公钥) = 密文
    decrypt(密文,私钥) = 明文
    
    sign(明文,私钥) = 密文
    verify(密文,公钥) = 明文

优点: 安全性高,私钥自己保存,不需要传输。 缺点: 加解密消耗高,速度慢。

HTTPS采用了对称加密+非对称加密的方案。具体做法如下:

但是依然解决不了中间人的攻击,如下图:

因此需要保证数据完整性引入数字签名

如何保证数据完整性-数字签名

网络传输过程中需要经过很多中间节点,虽然数据无法被解密,但可能被篡改,那如何校验数据的完整性呢?—-校验数字签名。

数字签名是通过HASH算法和RSA加密来实现的。 我们将明文数据加上通过RSA加密的数据HASH值一起传输给对方,对方可以解密拿出HASH值来进行验证。这个通过RSA加密HASH值数据,我们称之为数字签名。

数字签名有两种功效:

  • 能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。
  • 数字签名能确定消息的完整性,证明数据是否未被篡改过。

数字签名如何生成:

将一段文本先用HASH算法生成消息摘要,然后用发送者的私钥RSA加密生成数字签名,与原文一起传送给接收者。接下来就是接收者校验数字签名的流程了。

校验数字签名流程:

接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH算法对收到的原文产生一个摘要信息,与上一步得到的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

上面可行的前提是需要事先拿到可信的公钥,因此引入数字证书

如何校验身份-数字证书

数字证书就是Server将公钥和公司信息提交给证书颁发机构(Certificate Authority,简称CA),CA将公钥和其他信息数字签名后生成证书, Client也会内置所有受信CA的证书。 6

至此HTTPS的流程如下:

  1. 客户端请求服务器获取证书公钥
  2. 客户端(SSL/TLS)解析证书,判断真实性
  3. 生成密钥
  4. 公钥加密密钥
  5. 客户端将密钥发送给服务器
  6. 服务端用私钥解密得到密钥
  7. 将信息和密钥混合在一起进行对称加密
  8. 将加密的内容发送给客户端
  9. 客户端用密钥解密信息

附:

  • HTTPS默认使用443端口,而HTTP默认使用80端口。
  • TLS就是从SSL发展而来的,只是SSL发展到3.0版本后改成了TLS
  • 第一次请求中TLS握手的代价很大
  • 后续的请求会共用第一次请求的协商结果
取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦