HTTPS:证书

一、前言

在上一篇文章中我们介绍了,SSL的基本加密过程,如下

1.客户端向服务器端索要并验证公钥

2.双方协商生成“对话密钥”

3.双方采用“对话密钥”进行加密通信

不过遗憾的是,这种加密过程还是存在一些问题的,那就客户端无法保证自己收到的公钥就是服务器发送过来的货真价实的公钥,还有可能是中间人利用劫持技术将公钥给替换了。因此为了解决上述问题,我们引入了证书机制。

二、证书

公钥证书是由数字证书认证机构(CA)和其相关机关颁发的

证书机制的工作流程如下:

1 服务器的运维人员将公钥发送给CA数字认证机构

2 认证机构在收到公钥后会对这个公钥做数字签名操作,然后将这个公钥与数字签名等相关信息绑定在一起形成公钥证书(一个文件),发给运维人员,运维人员再将这个证书绑定在服务器中

3 客户端请求HTTPS进行通信时,服务器会将这份由CA数字证书认证机构颁发的公钥证书发送给客户端,以进行接下来非对称加密通信。

4 客户端接收到这份公钥证书之后,会使用数字证书认证机构的公钥对证书上数字签名进行验证,以确定服务器公钥的真实性。还会验证验证证书的相关信息,证书有效(没过期等)。这样客户端就可以确认两件事情:一是数字正式时真实有效的,二是服务器的公钥也是值得信赖的。

在这整个通信中,数字证书机构的公钥必须安全给客户端,如果还是使用通信的方式获取这个认证公钥,那么这个认证公钥还是有被篡改的风险。因此,鉴于这种情况,多数浏览器开发商发布版本的时候,会事先在内部植入常用认证机关的公钥。如下:

2.1 证书签发过程

1.服务方 S 向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;

2.数字证书机构通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;

3.如果信息审核通过,数字证书机构会向申请者签发认证文件-证书。证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;

签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA 的私钥对信息摘要进行加密,密文即签名。证书包含:公钥+申请者与颁发者的相关信息+签名。

2.2 完整通信步骤

1.客户端通过发送 Client Hello 报文开始 SSL 通信。报文中包含客户端支持的 SSL 的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。

2.服务器可进行 SSL 通信时,会以 Server Hello 报文作为应答。和客户端一样,在报文中包含 SSL 版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。

3.之后服务器发送 Certificate 报文。报文中包含公开密钥证书。

4.最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的 SSL 握手协商部分结束。

5.SSL 第一次握手结束之后,客户端以 Client Key Exchange 报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-master secret 的随机密码串。该报文已用步骤 3 中的公开密钥进行加密。

6.接着客户端继续发送 Change Cipher Spec 报文。该报文会提示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密。

7.客户端发送 Finished 报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。

8.服务器同样发送 Change Cipher Spec 报文。

9.服务器同样发送 Finished 报文。

10.服务器和客户端的 Finished 报文交换完毕之后,SSL 连接就算建立完成。当然,通信会受到 SSL 的保护。从此处开始进行应用层协议的通信,即发送 HTTP 请求。

11.应用层协议通信,即发送 HTTP 响应。

12.最后由客户端断开连接。断开连接时,发送 close_notify 报文。上图做了一些省略,这步之后再发送 TCP FIN 报文来关闭与 TCP 的通信。

抓包对比分析:

三、EV SSL证书

如果这个证书的作用一个是证明通信一方服务器是否规范,一个作用是服务器背后的运营企业是否真实存在,这样的证书就叫做EV SSL证书

四、客户端证书

HTTPS中还可以使用客户端证书,以客户端证书进行客户端认证,证明服务器通信的客户端是预料之内的客户端。

想要获取客户端证书,用户得自己安装客户端证书,这种证书一般在网上银行采用的比较多,有时候在登陆网银时,不仅要求用户确认输入ID和密码,还会要求用户的客户端证书,以确认用户是否为特定的终端访问

五、自签名证书

如果我们使用openssl这套开源程序给自己构建了一套认证机构,从而实现自己给自己办法服务器证书,但是由于该服务器证书在互联网上不可作为证书使用,似乎也没有什么帮助,因为客户端无法验证证书的有效性。主要还是起到了加密的作用。

对于这种独立构建的认证机构叫做自认证机构,由自认证机构办法的无用的证书也被成为自签名证书。浏览器访问这种使用自签名时会出现警告信息,如下:

六、总结

即使HTTPS如此安全,但是还是有很多的Web网站未使用HTTPS,其中一个原因时相比于纯文本通信,加密通信会消耗更多的CPU以及内存资源,如果每次通信都加密,会消耗相当多的资源,因此如果是非敏感信息则使用HTTP通信(可能会有劫持,网页上会出现广告)。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181111G1KZFR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券