一 名词释义
1.1 什么是HTTPS
HTTPS = HTTP + TLS(SSL)
1.1.1 HTTP
HyperText Transfer Protocol 超文本传输协议
现代互联网的基础,不多赘述

1.1.2 SSL
Secure Socket Layer 安全套接层协议 –> 注意断句。
比较老了,将会被TLS协议替代
1.1.3 TLS
Transport Layer Security 安全传输层协议, TLSv1 = SSL3.1, 替代SSL的后浪,也是我们要了解的重点。
TLS标准文档:[rfc2246](https://www.ietf.org/rfc/rfc2246.txt)


1.2 什么是 X.509
一种数字证书格式。
目前主流的版本是 X.509 v3, 标准文档地址在 [RFC5280](https://www.ietf.org/rfc/rfc5280.txt)


1.3 证书链
众所知周,一般CA不会直接签发证书,而是通过中间证书,再去签发。
因此,对于客户端来说,当他访问 www.xxx.com的时候,得到的可能并不是 一个x.509格式的证书,而是一串x.509证书。 这就是证书链。
以知乎为例。他的证书链这样的,三层:





也就是说 对于客户端来说,对于一个站点的校验,大部分情况下是对一整个数字链的校验。
android与java 自带的X509校验源码是不开源的。我这里查看是bouncycastle库,对于X509证书链的校验实现。


这是 bouncycastle 的官方网站。 www.bouncycastle.org/donate/index.cgi
这里的逻辑十分复杂。具体不展开了。
1.4 PKIX
Public-Key Infrastructure (X.509)
X.509 标准中对于公钥的基础规范
X.509是一个完整的证书协议,但是对于HTTPS校验信任,实际上主要校验的是公钥。也就是PKIX这部分内容。
wikipedia : https://en.wikipedia.org/wiki/X.509#PKI_standards_for_X.509



1.5 TrustAnchor
直译过来就是信任锚点
这并不是一个协议中规定的东西,而是java代码中抽象出来的一个概念,一个类。
但是他在认证过程中起到了比较重要的作用,需要单独解释。



1.6 OCSP
Online Certificate Status Protocol 数字证书在线状态校验协议
比如CA给 www.a.com 颁发了一个有效期是一年的证书,这个时间是写入证书文件的。 如果这一年内,该网站的证书被吊销,怎么办的。
TLS还提供了 在线数据校验的方法实时校验证书有效性,类似的机制还有 Certificate revocation list CRL 黑名单机制。
看看 BC中,是如何进行ocsp验证的。

