HTTPS安全性的几个具体问题

2021-05-13  本文已影响0人  Sweet丶

HTTPS安全连接主要通过身份认证、数据加密、完整性保护三方面保证安全性。iOS中HTTPS的安全连接问题
在通信方的身份认证我们通常是客户端通过验证服务器CA证书来保证安全性的,这个证书一般是从第三方权威机构买的,那么我们具体该怎么验证CA证书?

一、证书链验证

1. CA证书的生成过程
首先我们来了解CA证书的生成和使用流程(图是借的) CA 的使用流程
2. CA证书的验证过程

CA证书是自下而上的逐级验证的,从CA证书往上一直到根证书都是信任的就可以认为证书是可信任的。
采用CA证书中相同的散列函数计算明文信息得到信息摘要A --》用CA的公钥解密签名得到信息摘要B --> 如果信息摘要一致,则可以确认证书的合法性,即公钥合法(服务方 S 的公钥)--> 查询证书是否吊销、比对证书中的域名信息、有效时间等是否一致(可将证书内置在APP中比对公钥和域名) --> CA证书验证通过
CA验证通过之后以相同的原理验证“中间证书”,直到根证书,根证书是系统内置信任的。

3. CA证书的吊销

证书的吊销有两种机制:CRLOCSP
证书中一般会包含CRLOCSP的地址

OCSP的地址

文件包含了 CA 已经吊销的证书序列号(唯一)与吊销日期,包含了生效日期及下次更新该文件的时间,当然该文件必然包含 CA 私钥加密后得到的签名用来验证文件的合法性。
该吊销方式的优点是不需要频繁更新,但是不能及时吊销证书。因为 CRL 更新时间一般是几天,这期间可能已经造成了极大损失。

实时查询证书是否吊销。请求者发送证书的信息并请求查询,服务器返回正常、吊销或未知中的任何一个状态。证书中一般也会包含一个 OCSP 的 URL 地址,要求查询服务器具有良好的性能。

证书验证通过了,接下来看另一个问题:非对称加密的方式交换对称加密的秘钥,如何保证交换过程的安全性的?

二、对称加密的秘钥是怎么安全交换到服务器的

TLS握手的过程.png
由上图可以得知,协商秘钥(安全通道建立后通信使用的对称加密的秘钥)的生成需要3个随机数,客户端和服务器双方都参与了随机数的生成,而且最后的随机数 Pre-master 是公钥加密后传送到服务器的,只有拥有私钥的服务器能解开,所以是能保证协商秘钥的安全性。

另外的安全性隐患:

  • 另一方面,在发送client_hello和sever_hello报文时,其实是明文的,这个时候如果是有中间人攻击,把客户端支持的协议版本号降低为安全性更低的版本的协议比如:TLS1.1 -> SSL 1.0,那么后续的通信使用了更低安全性的加密算法,也存在安全隐患.
  • 假如客户端、服务器生成随机数不随机或者有规律,这个问题也存在安全隐患。
    TLS也是有解决办法的详见:HTTPS 加密的细节

对于客户端,要让用户生成证书是比较麻烦的,比如我们做iOS开发时,开发证书就是要自己按照步骤去生成,而且一个账号最多只能生成3个证书。
iOS APP签名机制原理详解

三、会话缓存握手过程

为了加快建立握手的速度,减少协议带来的性能降低和资源消耗,TLS 协议有两类会话缓存机制:会话标识 session ID 与会话记录 session ticket。

Session ID相当于一个验证码(但是可以重复使用),由服务器生成,半个小时没有使用就失效,使用就重置为半个小时有效期。http请求使用同一个Session ID就认为是在同一个session里面。

四、重建连接

在HTTPS连接已经建立的情况下,我们的服务器或者客户端在特定的情况下可以主动发起重新建连接,重新进行TLS握手,并且重建连接是在原来的TCP连接之上的,比如以下情况:

五、HTTPS优化

HTTPS连接虽然安全, 但是在原来HTTP的基础上多了TLS握手的过程,增加了RTT延时;多了加解密的过程,会消耗更多的服务器CPU资源。
优化的方向主要有:

全站 HTTPS 的时代已经来了,你准备好了吗?
Session会话恢复:两种简短的握手总结SessionID&SessionTicket

上一篇下一篇

猜你喜欢

热点阅读