HTTPS¶
HyperText Transfer Protocol Secure
计算机科学领域里没有什么是引入中间层不能解决的,如果有,那就再加一层。
HTTPS 就是在 HTTP 和 TCP 之间增加了 SSL/TLS 协议,以此来提高数据传输的安全性。
SSL/TLS 最初叫做 SSL(Secure Sockets Layer),是由网景公司发明,经历了 v1~v3 版本的迭代,然后改名为 TLS(Transport Layer Security) 继续迭代。
TLS 收发数据的基本单位:记录(record),由下面四个子协议和开源的密码学底层库实现的各种加密算法等组成
- 记录协议
- 警报协议
- 握手协议
- 密码变更协议
加密¶
开源密码学工具包 OpenSSL 是 SSL/TLS 的具体实现
将数据用公钥加密,发送给私钥所有者,数据无法被他人解密,但可能被他人篡改,因为每个人都可以用公钥加密数据,所以通常结合签名的方式一起使用防止篡改
HTTPS 中将对称与非对称加密算法结合在一起使用
- 对称加密,传输效率高,所以用语加密数据
- 非对称加密,更安全,用于传输对称加密的密钥
数字证书¶
- 用户证书:用户自行安装的
- 系统证书:操作系统内置的,需要有 Root 权限才能进行添加或删除。不要轻易安装盗版操作系统,如果从根儿上就已经不安全了,那么整个信任链也就没有安全可言。
为了证明公钥是可信的,引入了 PKI(Public Key Infrastructure 公开密钥基础设施),由硬件、软件、参与者、管理政策与流程组成的基础架构,其目的在于创造、管理、分配、使用、存储以及撤销数字证书。
CA Certificate Authority 证书颁发机构,对公钥拥有者做专业认证,认证通过后颁发数字证书(digital certificate),将数字证书内置到操作系统,建立一个信任链,以此保证公钥的可信
CA 按安全等级从低到高可分为
DV:只验证申请域名的所有权
OV:需对申请者/组织的身份做验证
EV:需经过法律和审计的严格核查
CA 按保护域名的数量分为
单域名版:只保护一个域名
多域名版:保护多个域名
通配符版:保护主域名下同一级的所有子域名
全球最大的七家 CA 组成了 CASC 证书颁发机构理事会: Comodo、Symantec、Trend Micro、DigiCert、Entrust、GlobalSign、GoDaddy,CASC
CASC 的成员必须遵守 CA/Browser Forum(证书机构与浏览器论坛)制定的标准,即 PKI,目前最新标准为 X.509 v3
审核并不一定是要提交给最大的这几个 CA,因为除了这些之外,还有一些大大小小的中介 CA,他们会组成一条条信任链,通过信任链的层层认证,最终也会被信任。不过机构越权威,安全等级也就越高,但同时也需要付出更多的费用,是的,申请数字证书是要花钱的(也有免费的),而且还不便宜,因为这背后需要很多安全和法律成本,并不是随便一个机构就能搞定的事情。
证书格式
DER 一种二进制编码,其文件扩展名为 .cer、.der、.crt
PEM 一种 Base-64 编码
PKCS 用于在单个文件中交换公有和私有对象。扩展名是 .p7b、.p7c、.p12 等
申请流程¶
作为服务端/申请者,如果想让自己的公钥被客户端所信任,需要将公钥以及一些必要信息等制作成一个 CSR(Certificate Signing Request 证书签发请求)文件,通过可信网络提交给 CA 审核。
CA 审核通过后,会按照 X.509 标准的格式,将所有的必要信息通过哈希/散列函数压缩成一串固定长度的哈希值,称之为「信息摘要」。这是一个不可逆过程,如果信息被篡改,则哈希值会变,以此保障信息的完整性。
然后会通过 CA 私钥把这些信息和信息摘要一起进行加密,因为 CA 私钥由 CA 保管,所以没有私钥的人无法实现这一过程,所以称之为数字签名,至此就生成了一个可信赖的数字证书。
一个证书通常包含以下信息:
- CA 信息
- CA 的数字签名
- CA 生成证书所用的摘要和非对称签名算法
- 持有者公钥匙
- 持有者唯一标识符,通常为域名
- 序列号,CA 分配给证书的唯一标识符
- 版本号,指出该证书使用了哪种版本的X.509标准
- 有效期
最后,CA 将数字证书颁发给申请者,申请者会将其部署到服务器中,在收到客户端请求后将数字证书返回,客户端收到数字证书后,会对数字证书进行验证。
可以看到 github.com
的颁发者和有效日期,然后把菜单切到「证书路径」tab下,这就是我们前文提到的信任链,通过这个层级结构,就可以知道 github.com
的颁发者是由 DigiCert 这个 CA 认证的,也就是我们前文提到的全球最大 CA 之一,那么这些顶级的 CA 机构是由谁认证呢,答案是他们自己给自己认证,当然前提是因为这些顶级机构有足够的实力和信誉我们才选择相信他,就像各个国家的中央机构,你只能选择相信,不然整个社会体制就无法正常运转下去,言归正传,这些顶级 CA 会给自己签发一个数字证书,通常被称为「根证书」,这些根证书会被预置在我们的操作系统以及浏览器中,系统会定期检查他们是否已被吊销,尽可能保持最新可信状态。
TLS 握手¶
在 TCP 连接建立之后,开始进行 TLS 握手,用于建立安全的通信通道,客户端会和服务端共同商议使用什么对称加密算法
https://www.thesslstore.com/blog/explaining-ssl-handshake/