https原理知识

一、证书准备过程

1.在本地服务器通过openssl指令生成私钥文件pem。
2.根据私钥文件生成对应的公钥文件(csr),即证书签名请求文件,提交给CA进行证书制作,私钥则自己留着部署在服务器上。
3.根据要申请的证书类型(DV,OV,EV),再提供相关材料给CA机构进行审核。
4.通过审核后,进行证书的签发(签发过程后面详细介绍)
5.使用者收到证书后,将证书部署在服务器上

二、证书签发过程

image.png
  1. 撰写证书元数据:包括 签发人(Issuer)、地址、签发时间、有效期 等,还包括证书持有者(Owner)基本信息,比如 DN(DNS Name,即证书生效的域名)、 Owner 公钥 等信息。
  2. 通过Issuer(CA)的证书指定的Hash 算法(如SHA-256)对证书元数据(Data/摘要)计算生成指纹。
  3. 使用 Issuer(CA)私钥对摘要进行非对称加密(RSA),生成一个加密的指纹,也就是Issuer(CA)的 数字签名。
  4. 将数字签名attach到证书(Certificate)上,变成一个签过名的数字证书(Digitally signed data)。
  5. 将签过名的数字证书发给使用者

三、https请求过程

1.客户端与服务端建立TCP连接,三次握手(ssl是在tcp层之上,基于tcp)

————————————接下来开始SSL四次握手过程———————————————

2.客户端请求建立SSL链接,发送Client Hello包:

  • 支持的协议版本,比如TLS 1.0版
  • 支持的加密方法(密文族),比如RSA公钥加密
  • 支持的压缩方法
  • 随机数(时间戳 + Client.random(客户端随机数))

3.服务端响应信息,ServerHello包:

  • 确认使用的加密通信协议版本,如果客户端与服务器支持的版本不一致,服务器关闭加密通信
  • 确认使用的加密方法,比如RSA公钥加密
  • 服务器证书(签过名的数字证书)
  • 随机数(时间戳 + sever.random(服务端随机数))
  1. 客户端回应:
  • 验证证书的合法性(验证过程后面详细介绍),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示
  • 如果证书可信,客户端再生成一个随机数(pre-master key),并用证书中的服务器公钥加密
  • 编码改变通知,表示随后的信息都将用双方协定的相同的会话密钥SessionSecret(Client.random + sever.random + pre-master生成对称密钥)进行加密通讯
  • 客户端握手结束通知,表示客户端的握手阶段已经结束。使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给服务器

5.服务器回应:

  • 使用服务器的私钥将随机数(pre-master key)解密。
  • 使用随机数(pre-master key)解密客户端发送的握手消息,并验证HASH是否与客户端发送的一致。
  • 编码改变通知,表示随后的信息都将用双方协定的相同的会话密钥SessionSecret进行加密通讯
  • 服务器握手结束通知,表示服务器的握手阶段已经结束,将前面发送的所有内容的HASH值,用来供客户端校验

————————————接下来开始对称加密通讯———————————————
6.对称加密通讯:客户端和服务端均用SessionSecret进行加密解密信息,进行通讯

四、验证证书过程

image.png

知识点:何正版操作系统都会将所有主流CA机构的公钥内置到操作系统当中,所以我们不用额外获取,解密时只需遍历系统中所有内置的CA机构的根证书公钥,只要有任何一个公钥能够正常解密出数据,就说明它是合法的。

4.1 单根证书认证
image.png

1.通过操作系统或者浏览器内置信任的CA机构的根证书公钥对数字签名进行解密,解密得到指纹A
2.将收到的服务器证书的摘要进行Hash计算得到指纹B
3.对比指纹A与指纹B是否一致,如果一致则认证通过,反之认证不通过

4.2 证书链认证
image.png

根证书:由CA机构分发,公钥会内置在操作系统或浏览器中。通过公钥能解密根证书的数字签名并获得指纹(单根证书认证过程),这种情况就叫做自签名(self-sign)

中间证书:包含根证书的名称(颁发者),需要使用根证书的公钥(Root CA's public key)才能解密中间证书的数字签名并获得指纹。

终端证书:包含中间证书的名称(颁发者),需要使用中间证书的公钥才能解密终端证书的数字签名并获得指纹

1.通过终端证书的信息,获取到对应的中间证书(方式一:客户端通过终端证书中的信息,主动下载中间证书。方式二:由服务器主动推动证书至客户端)
2.通过中间证书的信息, 在浏览器或系统中找到对应的根证书(找不到客户端就下载安装)
3.对根证书进行认证(认证过程类似单根证书认证过程)。
4.根证书认证通过,则使用根证书公钥对中间证书认证(认证过程类似单根证书认证过程)
5.中间证书认证通过,则使用中间证书公钥对终端证书进行认证(认证过程类似单根证书认证过程)
6.终端证书认证通过,则此证书可信。

五、名词解释

  • csr:证书签名请求文件(公钥),用于提交给证书颁发机构(CA)对证书签名

  • 数字证书(Digital certificate):由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,一般包含:证书格式版本号;证书序列号;证书签名算法;证书颁发者;有效期;对象名称;对象公开密钥;证书颁发者的数字签名;

  • openssl:一个自由的软件组织,专注做加密和解密的框架。

  • DV SSL:域名型证书

  • OV SSL:企业型证书

  • EV SSL:增强型证书

  • SSL:(Secure Socket Layer,安全套接字层),目前版本为3.0

  • TLS:(Transport Layer Security,传输层安全协议),最新版本的TLS 1.0是IETF(工程任务组)制定的一种新的协议,它建立SSL 3.0协议规范之上,是SSL 3.0的后续版本,两者差别极小。

你可能感兴趣的:(https原理知识)