# 05 SSL-TLS四次握手

## 一: 图解四次握手

![](https://raw.githubusercontent.com/RyukieSama/RyukieImage/master/Blog/TLS%E5%9B%9B%E6%AC%A1%E6%8F%A1%E6%89%8B.png)

## 二: 数字证书

> 数字证书是一个电子文档, 其中包含了持有者的信息/公钥/证明证书有效的数字签名. 数字证书室友证书认证机构(CA)来负责签发管理 数字证书的类型有多种,HTTPS使用的是SSL证书

### CA组织的结构

* CA组织顶层是根CA
* 根CA下可以授权给多个二级CA
* 二级CA又可以授权给多个三级CA
  * 那么是不是可以无限信任下去呢?
    * 显然不行(`Basic Constraint校验漏洞`)
    * X.509证书中的`Basic Constraint`包含了这是不是一个CA机构，以及有效证书路径的`最大深度`（即，这个CA还能否继续签发CA机构证书及其签发子CA证书的路径深度）

> SSL证书市场,主要被Symantec(旗下有VeriSign和GeoTrust)、Comodo SSL、Go Daddy 和 GlobalSign 瓜分了

### 签发流程

![](https://raw.githubusercontent.com/RyukieSama/RyukieImage/master/Blog/CA%E7%AD%BE%E5%8F%91%E6%95%B0%E5%AD%97%E8%AF%81%E4%B9%A6%E6%B5%81%E7%A8%8B.png)

数字证书的签发机构CA，在接收到申请者的资料后进行核对并确定信息的真实有效，然后就会制作一份符合X.509标准的文件。证书中的证书内容包含的持有者信息和公钥等都是由申请者提供的，而数字签名则是CA机构对证书内容进行hash加密后得到的，而这个数字签名就是我们验证证书是否是有可信CA签发的数据。

### 验证流程

![](https://raw.githubusercontent.com/RyukieSama/RyukieImage/master/Blog/CerValiate%E8%AF%81%E4%B9%A6%E9%AA%8C%E8%AF%81.png)

1. 接收到一份数字证书Cer1后,对证书内容做Hash得到数字摘要H1
2. 从签发该证书的机构CA1的证书中找到公钥,对证书上的签名进行解密,得到证书Cer1签名的Hash摘要H2
3. 对比H1 H2 如果相等表示证书没有被篡改(还未知有效性)
4. CA机构的数字证书是公开的,所有人都可以拿到.这个证书中的数字签名是上一级生成的,所以可以一直验证下去,直到根证书.根CA证书是自验证的(即数字签名是用自己的私钥生成了).合法的根CA证书会被浏览器和操作系统加入到信任CA列表中,这样完成了最终验证

> 注意: 一定要保护好自己的环境(浏览器,操作系统)中的根CA证书信任列表,信任了根证书就代表任何根证书下的字CA签发的证书,所以不要随便添加根CA证书信任

* iOS中的验证流程
  * 先获取到需要验证的信任对象
  * 使用系统默认的验证方式验证(自建证书不用,不在信任列表中)
  * 第二步验证通过后就可以直接通过了,建立连接
  * 验证不通过,取消验证流程,拒绝连接请求

## 参考

> <http://oncenote.com/2014/10/21/Security-1-HTTPS/> Jaminzzhang博客 <http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html> 阮一峰 <http://www.ruanyifeng.com/blog/2014/02/ssl\\_tls.html> 阮一峰


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ryukiedev.gitbook.io/wiki/wang-luo/ssltls-si-ci-wo-shou.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
