浏览器如何校验HTTPS的数字证书

本文解决的问题如下:

  • 从HTTP协议变成HTTPS协议为何需要证书?
  • HTTPS协议如何体现出安全(HTTPS协议原理)?
  • 如何免费获取HTTPS所需的证书以及如何部署证书到服务器?
  • 浏览器如何验证证书?
  • 证书中包含哪些内容?
  • CA证书和网关证书是一个东西吗?

免费申请证书

免费申请证书网站:https://freessl.cn

参考文章:blog.freessl.cn/acme-quick-start/

  1. 域名申请,并解析到服务器
  2. 证书与域名绑定
  3. 在服务器下载证书部署脚本,并部署

HTTPS原理

从 HTTP 协议栈层面来看,我们可以在 TCP 和 HTTP 之间插入一个安全层,所有经过安全层的数据都会被加密或者解密,

PHP
于是HTTPS就变成了HTTP和安全层先通信,安全层再和TCP通信。在安全层完成数据的加解密过程。

加密方式:

  • 对称加密,就是双方使用“相同的密钥”,一方加密一方解密。
    • 优点:加解密快
    • 缺点:加密密钥易暴露,安全性低
  • 非对称加密,就是一方使用公钥加密,另一方只能使用私钥解密,公钥和私钥是唯一配对的。
    • 优点:安全
    • 缺点:加解密慢

:bangbang:基于以上特性,传输数据过程采用对称加密方式保证数据传输效率, 用非对称加密方式解决密钥易暴露问题。

PHP

  1. 浏览器发起https握手链接时,告知服务器自己支持的“对称加密套件列表” 和 “非对称加密套件列表”以及一个自己生成的“随机数client-random”。

  2. 服务器收到请求后,选择自己支持的加密方式告知浏览器,且返回一个“数据数service-random” 和 “服务器的数字证书” 和 颁发给服务器数字证书这个“CA机构本身的数字证书”。

  3. 浏览器验证“服务器数字证书”和“CA机构数字证书”的有效性, 验证成功后,再生成一个随机数“pre-master”,并使用“服务器数字证书”中携带的“公钥”对随机数“pre-master”进行加密,发送给服务确认。

  4. 服务器利用“服务器数字证书”的“私钥”进行解密,得到随机数“pre-master”, 并响应浏览器已收到。

  5. 浏览器把之前自己生成的随机数“client-random”、“pre-master” 以及服务器返回的“service-random” 组合在一起生成一个新的密钥“master secret”, 之后利用新的密钥进行与服务器之间数据的加密。

提问:

  1. 服务器上的证书来自哪里?
    向CA机构申请的数字证书, 部署在服务器上时,一般除了CA机构颁发给服务的数字证书(俗称网关证书),还有“CA机构自身的数字证书”。

  2. CA机构颁发给服务器的数字证书中包含哪些内容?
    至少包含了向CA机构申请证书时的“组织机构/个人信息”, “证书有效期”、“证书的公钥”、“CA机构给到证书的数字签名”、“CA机构信息”等

  3. 服务器上只部署了服务器自己的证书,没有CA机构的数字证书,咋办?
    服务器上没得CA机构的数字证书时,浏览器可以从互联网自动下载,但这样可能拉长首次接口/页面访问的时间,还可能失败。

浏览器如何验证证书

:one:首先, 浏览器利用证书中指定的hash算法对”组织机构的明文信息”计算出信息摘要
:two:然后,利用CA证书的公钥来解密数字证书中的”数字签名”,解密出来的数据也是信息摘要。
:three:最后,判定两个摘要信息是否相等就行。

PHP

如何证明CA证书本身不是伪造的呢?

简单粗暴的方案是:操作系统内置所有CA机构的证书,且假设这个操作系统没有被恶意入侵。

折中方案是:把CA机构分成两类,根CA和中间CA, 我们通常向中间CA申请证书,根CA主要给中间CA做认证用。中间CA又可以给其它中间CA认证,形成树状结构,一级级认证,直到找到根证书。

证书上都有证书链,能找到上一级机构是什么,使用与上一步相同的算法,让上一级机构证实当前证书的真实性,直到追溯到根证书,而根证书只需要在操作系统中可查找到就任务是对的,因为根证书是行业内浏览器和操作系统厂商的规范。

如何检验根证书的合法性?

根证书在安装操作系统时内置了。 内置的根证书,是通过WebTrust国际安全审计认证的,权威证书。

如何验证根证书是否合法,浏览器查找根证书是否存在操作系统里面,若不是则不合法,反之则合法。

WebTrust 是由两大著名注册会计师协会 AICPA(美国注册会计师协会)和 CICA(加拿大注册会计师协会)共同制定的安全审计标准,主要对互联网服务商的系统及业务运作逻辑安全性、保密性等共计七项内容进行近乎严苛的审查和鉴证。 只有通过 WebTrust 国际安全审计认证,根证书才能预装到主流的操作系统,并成为一个可信的认证机构。

自签名证书

自签名的CA证书,需要用户提前内置证书在用户电脑文件中,或者放置在服务器上。
根证书就是一种特殊的自签名证书。

本作品采用《CC 协议》,转载必须注明作者和本文链接
学过的东西能说出来那是最妙的,能复盘写下来那也不错
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

在自己的博文中搜不到这个文章,也看不见,只能在 提示增加声望值的地方找到,这是为什么呢?

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!