本文解决的问题如下:
- 从HTTP协议变成HTTPS协议为何需要证书?
- HTTPS协议如何体现出安全(HTTPS协议原理)?
- 如何免费获取HTTPS所需的证书以及如何部署证书到服务器?
- 浏览器如何验证证书?
- 证书中包含哪些内容?
- CA证书和网关证书是一个东西吗?
免费申请证书
免费申请证书网站:https://freessl.cn
-
域名申请,并解析到服务器
-
证书与域名绑定
-
在服务器下载证书部署脚本,并部署
HTTPS原理
从 HTTP 协议栈层面来看,我们可以在 TCP 和 HTTP 之间插入一个安全层,所有经过安全层的数据都会被加密或者解密,
于是HTTPS就变成了HTTP和安全层先通信,安全层再和TCP通信。在安全层完成数据的加解密过程。
加密方式:
- 对称加密,就是双方使用“相同的密钥”,一方加密一方解密。
- 优点:加解密快
- 缺点:加密密钥易暴露,安全性低
- 非对称加密,就是一方使用公钥加密,另一方只能使用私钥解密,公钥和私钥是唯一配对的。
- 优点:安全
- 缺点:加解密慢
基于以上特性,传输数据过程采用对称加密方式保证数据传输效率, 用非对称加密方式解决密钥易暴露问题。
-
浏览器发起https握手链接时,告知服务器自己支持的“对称加密套件列表” 和 “非对称加密套件列表”以及一个自己生成的“随机数client-random”。
-
服务器收到请求后,选择自己支持的加密方式告知浏览器,且返回一个“数据数service-random” 和 “服务器的数字证书” 和 颁发给服务器数字证书这个“CA机构本身的数字证书”。
-
浏览器验证“服务器数字证书”和“CA机构数字证书”的有效性, 验证成功后,再生成一个随机数“pre-master”,并使用“服务器数字证书”中携带的“公钥”对随机数“pre-master”进行加密,发送给服务确认。
-
服务器利用“服务器数字证书”的“私钥”进行解密,得到随机数“pre-master”, 并响应浏览器已收到。
-
浏览器把之前自己生成的随机数“client-random”、“pre-master” 以及服务器返回的“service-random” 组合在一起生成一个新的密钥“master secret”, 之后利用新的密钥进行与服务器之间数据的加密。
提问:
-
服务器上的证书来自哪里?
向CA机构申请的数字证书, 部署在服务器上时,一般除了CA机构颁发给服务的数字证书(俗称网关证书),还有“CA机构自身的数字证书”。 -
CA机构颁发给服务器的数字证书中包含哪些内容?
至少包含了向CA机构申请证书时的“组织机构/个人信息”, “证书有效期”、“证书的公钥”、“CA机构给到证书的数字签名”、“CA机构信息”等 -
服务器上只部署了服务器自己的证书,没有CA机构的数字证书,咋办?
服务器上没得CA机构的数字证书时,浏览器可以从互联网自动下载,但这样可能拉长首次接口/页面访问的时间,还可能失败。
浏览器如何验证证书
首先, 浏览器利用证书中指定的hash算法对”组织机构的明文信息”计算出信息摘要
然后,利用CA证书的公钥来解密数字证书中的”数字签名”,解密出来的数据也是信息摘要。
最后,判定两个摘要信息是否相等就行。
如何证明CA证书本身不是伪造的呢?
简单粗暴的方案是:操作系统内置所有CA机构的证书,且假设这个操作系统没有被恶意入侵。
折中方案是:把CA机构分成两类,根CA和中间CA, 我们通常向中间CA申请证书,根CA主要给中间CA做认证用。中间CA又可以给其它中间CA认证,形成树状结构,一级级认证,直到找到根证书。
证书上都有证书链,能找到上一级机构是什么,使用与上一步相同的算法,让上一级机构证实当前证书的真实性,直到追溯到根证书,而根证书只需要在操作系统中可查找到就任务是对的,因为根证书是行业内浏览器和操作系统厂商的规范。
如何检验根证书的合法性?
根证书在安装操作系统时内置了。 内置的根证书,是通过WebTrust国际安全审计认证的,权威证书。
如何验证根证书是否合法,浏览器查找根证书是否存在操作系统里面,若不是则不合法,反之则合法。
WebTrust 是由两大著名注册会计师协会 AICPA(美国注册会计师协会)和 CICA(加拿大注册会计师协会)共同制定的安全审计标准,主要对互联网服务商的系统及业务运作逻辑安全性、保密性等共计七项内容进行近乎严苛的审查和鉴证。 只有通过 WebTrust 国际安全审计认证,根证书才能预装到主流的操作系统,并成为一个可信的认证机构。
自签名证书
自签名的CA证书,需要用户提前内置证书在用户电脑文件中,或者放置在服务器上。
根证书就是一种特殊的自签名证书。
推荐学习:《HTTP视频教程》