一、HTTPS是什么?SSL/TLS又是什么?

1.安全特性

通信过程具备了四个特性,就可以认为是“安全”的,这四个特性是:机密性、完整性,身份认证和不可否认。

机密性(Secrecy/Confidentiality)是指对数据的“保密”,只能由可信的人访问,对其他人是不可见的“秘密”,简单来说就是不能让不相关的人看到不该看的东西。

完整性(Integrity,也叫一致性)是指数据在传输过程中没有被窜改,不多也不少,“完完整整”地保持着原状。

身份认证(Authentication)是指确认对方的真实身份,也就是“证明你真的是你”,保证消息只能发送给可信的人。

第四个特性是不可否认(Non-repudiation/Undeniable),也叫不可抵赖,意思是不能否认已经发生过的行为,不能“说话不算数”“耍赖皮”。

2.什么是 HTTPS?

HTTPS 其实是一个“非常简单”的协议,默认端口号 443,至于其他的什么请求 - 应答模式、报文结构、请求方法、URI、头字段、连接管理等等都完全沿用 HTTP,没有任何新的东西。

HTTPS 凭什么就能做到机密性、完整性这些安全特性呢?

关键就在于HTTPS 名字里的“S”,它把 HTTP 下层的传输协议由 TCP/IP 换成了 SSL/TLS,由“HTTP over TCP/IP”变成了“HTTP over SSL/TLS”,让 HTTP 运行在了安全的 SSL/TLS 协议上,收发报文不再使用 Socket API,而是调用专门的安全接口。
image.png

3.SSL/TLS

SSL 即安全套接层,在 OSI 模型中处于第 5 层(会话层)

TLS 由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术。

TLS 的密码套件命名非常规范,格式很固定。基本的形式是“密钥交换算法 + 签名算法 + 对称加密算法 + 摘要算法”

4.OpenSSL

它是一个著名的开源密码学程序库和工具包,几乎支持所有公开的加密算法和协议,已经成为了事实上的标准,许多应用软件都会使用它作为底层库来实现 TLS 功能,包括常用的 Web 服务器 Apache、Nginx 等。

小结

  • 因为 HTTP 是明文传输,所以不安全,容易被黑客窃听或窜改;
  • 通信安全必须同时具备机密性、完整性,身份认证和不可否认这四个特性;
  • HTTPS 的语法、语义仍然是 HTTP,但把下层的协议由 TCP/IP 换成了 SSL/TLS;
  • SSL/TLS 是信息安全领域中的权威标准,采用多种先进的加密技术保证通信安全;
  • OpenSSL 是著名的开源密码学工具包,是 SSL/TLS 的具体实现。

二、对称加密与非对称加密

1.对称加密

“对称加密”很好理解,就是指加密和解密时使用的密钥都是同一个,是“对称”的。只要保证了密钥的安全,那整个通信过程就可以说具有了机密性。

TLS常用算法AES 和 ChaCha20。

2.非对称加密

它有两个密钥,一个叫“公钥”(public key),一个叫“私钥”(private key)。两个密钥是不同的,“不对称”,公钥可以公开给任何人使用,而私钥必须严格保密。

公钥加密后只能用私钥解密,反过来,私钥加密后也只能用公钥解密。

3.混合加密

对称加密和非对称加密结合起来呢,两者互相取长补短,即能高效地加密解密,又能安全地密钥交换。这就是现在 TLS 里使用的混合加密方式。

小结

  • 加密算法的核心思想是“把一个小秘密(密钥)转化为一个大秘密(密文消息)”,守住了小秘密,也就守住了大秘密;
  • 对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换,常用的有 AES 和 ChaCha20;
  • 非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢,常用的有 RSA 和 ECC;
  • 把对称加密和非对称加密结合起来就得到了“又好又快”的混合加密,也就是 TLS 里使用的加密方式。

三、数字签名与证书

1.完整性

摘要算法保证了“数字摘要”和原文是完全等价的。

2.数字签名

非对称加密里的“私钥”,使用私钥再加上摘要算法,就能够实现“数字签名”,同时实现“身份认证”和“不可否认”。

3.数字证书和 CA

它就像网络世界里的公安局、教育部、公证中心,具有极高的可信度,由它来给各个公钥签名,用自身的信誉来保证公钥无法伪造,是可信的。

CA 对公钥的签名认证也是有格式的,不是简单地把公钥绑定在持有者身份上就完事了,还要包含序列号、用途、颁发者、有效时间等等,把这些打成一个包再签名,完整地证明公钥关联的各种信息,形成“数字证书”(Certificate)。

小结

  • 摘要算法用来实现完整性,能够为数据生成独一无二的“指纹”,常用的算法是 SHA-2;
  • 数字签名是私钥对摘要的加密,可以由公钥解密后验证,实现身份认证和不可否认;
  • 公钥的分发需要使用数字证书,必须由 CA 的信任链来验证,否则就是不可信的;
  • 作为信任链的源头 CA 有时也会不可信,解决办法有 CRL、OCSP,还有终止信任。

四、TLS1.2连接过程解析

  • HTTPS 协议会先与服务器执行 TCP 握手,然后执行 TLS 握手,才能建立安全连接;
  • 握手的目标是安全地交换对称密钥,需要三个随机数,第三个随机数“Pre-Master”必须加密传输,绝对不能让黑客破解;
  • “Hello”消息交换随机数,“Key Exchange”消息交换“Pre-Master”;
  • “Change Cipher Spec”之前传输的都是明文,之后都是对称密钥加密的密文。

五、TLS1.3特性解析

  • 为了兼容 1.1、1.2 等“老”协议,TLS1.3 会“伪装”成 TLS1.2,新特性在“扩展”里实现;
  • 1.1、1.2 在实践中发现了很多安全隐患,所以 TLS1.3 大幅度删减了加密算法,只保留了 ECDHE、AES、ChaCha20、SHA-2 等极少数算法,强化了安全;
  • TLS1.3 也简化了握手过程,完全握手只需要一个消息往返,提升了性能。

六、HTTPS优化

  • 可以有多种硬件和软件手段减少网络耗时和计算耗时,让 HTTPS 变得和 HTTP 一样快,最可行的是软件优化;
  • 应当尽量使用 ECDHE 椭圆曲线密码套件,节约带宽和计算量,还能实现“False Start”;
  • 服务器端应当开启“OCSP Stapling”功能,避免客户端访问 CA 去验证证书;
  • 会话复用的效果类似 Cache,前提是客户端必须之前成功建立连接,后面就可以用“Session ID”“Session Ticket”等凭据跳过密钥交换、证书验证等步骤,直接开始加密通信。

七、我应该迁移到HTTPS吗?

  • 从 HTTP 迁移到 HTTPS 是“大势所趋”,能做就应该尽早做;
  • 升级 HTTPS 首先要申请数字证书,可以选择免费好用的“Let’s Encrypt”;
  • 配置 HTTPS 时需要注意选择恰当的 TLS 版本和密码套件,强化安全;
  • 原有的 HTTP 站点可以保留作为过渡,使用 301 重定向到 HTTPS。