ssl校验过程
一图胜千言!

注意:
- https并不是完全的非对称加密,它是由非对称加密和对称加密两部分组成,这种方式在密码学上被称作
数字信封 - https的对称加密密钥交换过程中,是采用非对称加密(公钥利用证书的公钥)
- https的数据传输加密过程中,是采用对称加密
- 传输之前,server和client会沟通对称加密算法
- 很多同学会疑惑秘钥交换过程不会出现窃听吗,有一种基于
离散对数的秘钥交换算法diffie-hellman秘钥交换,该算法实现了计算上不可行的秘钥交换
ssl双向校验过程
如果服务端需要验证客户端,那么客户端也要签发证书。

- 跟单向认证的区别是,服务器必须要验证客户端身份后,才会与客户端商量加密方法
技术细节
第三步是怎么验证证书合法性的?
我们回顾一下握手步骤:
- client 请求
- 服务端发起挑战随机数,公钥和证书
- 客户端验证证书
那么第三步究竟是怎么验证证书的呢?
要从下面讲起:
X509证书在https应用上怎么才能验证可信?
三个步骤:
- CA私钥签名证书,返回公钥给客户
- 客户挂上证书,留着CA公钥给自己的客户检查
- 客户以公钥解密证书,若能解密,则继续验证信息
有心人可以发现,第二步的CA公钥是服务端发送给浏览器做验证的,那么这一步是否可以出现攻击行为?比如替换该公钥为自签名证书的公钥?然后伪造是CA签发的证书。
也有同学会细心的发现,抓包并没有发现Https会通过CA验证证书公钥合法性。
引入两个概念:
OSCP or CRL
CRL(Certificate Revocation List)
CRL 维护了一个黑名单,上面是撤销的证书号,浏览器可以定期从上面下载(update etc..)。
同时浏览器也会维护一个trustStore来弥补CRL可能出现的问题
OCSP(Online Certificate Status Protocal 在线证书状态协议)
OCSP 意味着浏览器任何一次https握手都会访问CA验证公钥。
OCSP stamping 这是服务器维护的验证方案,它帮你远程
浏览器维护了什么?
实际上,浏览器只维护了根证书
这是知乎的证书签发链。

浏览器的工作简而言之就是:
-
通过根证书验证CA是否属于合法下属CA
-
通过下属CA公钥验证证书
技术细节
事实上,浏览器只会最先获得*.zhihu.com这个证书,它是怎么验证上层证书的呢?
- 浏览器通过服务器发送的公钥验证
*.zhihu.com - 继续验证签发
*.zhihu.com的CA证书GeoTrust RSA CA 2018 - 用根证书
DigiCert Global Root CA公钥验证GeoTrust RSA CA 2018 - 若
*.zhihu.com不是伪造证书,则根证书必然验证成功,vice versa
根证书由三次元力量强行介入,用户不捣乱,则绝对安全
这个证书链就是PKI(public key infrastructure) PGP(PKI X.509)
以这样的方式,浏览器实现了不用OCSP就能验证证书,这就是三次元的力量