网络协议之保密局 - Https

安全,这件事情无处不在。
我们不希望自己的个人信息被泄漏。
我们不希望自己的银行卡密码被盗取。
我们不希望自己的一言一行被监控,我们希望能有个人的隐私.
作为用户获取信息的入口之一 - 浏览器,它是如何保证信息安全的? 浏览器安全的主角Https登场了.

  • 背景
  • 什么是Https
  • Https的机制是什么?
  • 安全和Https拾遗

背景

1994年,网景公司在TCP/IP协议栈上创建了一个传输加密层: SSL(Secure Socket Layer), 这是一个原始规范,但没有发布。
1995年2月,修订了规范,并发布了SSL 2.0.
1996年,SSL 3.0发布, 得到大规模应用.
IETF 觉得SSL有硬伤,只能加密HTTP,为什么不能加密所有的应用层协议呢?
IETF在SSL 3.0的基础上, 重新命名和设计了这个协议,取名为TLS。
1999年1月, TLS 1.0 发布.
2006年4月, TLS 1.1 发布.
2008年8月, TLS 1.2 发布.
2018年3月, TLS 1.3 发布.

什么是Https

Https是一种网络协议, Https = Http + SSL/TLS. HTTPS是为了

  • 身份验证 - 张三给李四发消息,如何保证李四知道这个消息是张三发送的?
  • 信息泄漏 - 张三给李四发消息,如何保证信息不泄漏给王五?
  • 信息篡改 - 张三给李四发消息,王五拿到信息进行了篡改,李四如何知道这个信息有没有被篡改?

以上三个问题可以规约成一个问题:

  • A给B发消息,如果保证只有通信双方知道消息的内容?

Https的机制是什么

在讨论Https的原理和机制之前,先确定几个大的前提

  • 操作系统是正常的 - 不要使用盗版操作系统
  • 浏览器是正常的 - 不要下载被改造过的浏览器
  • CA中心是正常的 - 就好比一个市政府不能是假的.
  • 人是有可能犯错的 - 有时候脑子短路,会有误操作.
  • 服务端的私钥是不会被窃取的

引入这些大前提的目的是

  • 方便讨论问题,否则会钻进一些牛角尖。
  • 说明没有绝对的安全。

Https机制的核心理念

  • 非对称加密实现证书的传输
  • 对称加密进行数据的传输

Https的两大阶段

  • 证书验证
    • 客户端发起连接请求
    • 服务端返回证书
    • 客户端验证证书是否合法,如果不合法则给予警告和提示
  • 数据传输
    • 证书验证合法之后,客户端生产随机数,用服务端的公钥加密随机数
    • 将随机数发送给服务端, 服务端根据随机数选择对称加密算法。
    • 服务端对要返回的内容进行加密

中间人攻击 - Man In The Middle

中间人攻击是客户端和服务端在通信的时候,通信被第三方劫持,而客户端和服务端都意识不到第三方的存在。
一个基本事实:

  • 证书只有服务端能拥有.

在基于上面提到的几大前提的基础上,要防止中间人攻击的问题就变为:

  • 如何让客户端知道这个证书是正常的?

客户端如何验证证书的有效性的?

  • 验证域名, 有效期
  • 验证根证书来源是否合法
  • 验证证书是否被篡改
  • 验证证书是否被吊销
    • 黑名单方式 - 定期从CA下载名单列表,效率高,但不实时.
    • OCSP方式 - 在线验证。效率低,但实时性高.

证书的三种类型

  • DV - 验证域名
  • OV - 验证域名,企业信息
  • EV - 验证域名,企业信息,律师函等等.

安全和Https拾遗

下面是近些年遇到的一些与安全相关的话题

  • 大概4年前左右的样子,公司将全部站点升级为Https.
  • 以前数据库密码是明文保存的,现在已经改成密文了.
  • 代码库里不同的branch有不同的权限.
  • 一些数据库连接字符串在github仓库里是密文保存的,下载到本地之后是明文.
  • 网站有段时间账号攻击,加了验证码作为第一道关卡。
  • GDPR - 对于欧洲的用户,用户同意之后,数据才能保存到Salesforce里