You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
# 关于信任根证书的说明
## 一、为什么要信任根证书。
要回答这个问题需要先掌握下面两个知识点
### 知识点1: 什么是根证书
[百度百科-什么是根证书 ](https://baike.baidu.com/item/%E6%A0%B9%E8%AF%81%E4%B9%A6/9874620?fr=aladdin )
当访问目标网站是https协议时, 服务器会发送一个由根证书签发的网站ssl证书给浏览器, 让浏览器用这个ssl证书给数据加密。
浏览器需要先验证这个证书的真伪,之后才会使用证书加密。
证书的真伪是通过验证证书的签发机构的证书是否可信,一直追溯到最初始的签发机构的证书(根证书)。
浏览器只需信任根证书,间接的就信任了这条证书链下签发的所有证书。
windows、mac、linux或者浏览器他们都内置了市面上可信的大型证书颁发机构的根证书。
### 知识点2: 中间人攻击
本应用的实现原理如下图:
![](./flow.jpg)
> 简单来说就是DevSidecar在本地启动了一个代理服务器帮你访问目标网站。
> 实际上就是 [中间人攻击](https://baike.baidu.com/item/%E4%B8%AD%E9%97%B4%E4%BA%BA%E6%94%BB%E5%87%BB/1739730?fr=aladdin) 的原理,只是本应用没有用它来干坏事,而是帮助开发者加速目标网站的访问。
### 现在可以回答为什么要信任根证书
当目标网站不需要加速拦截时, 直接走TCP转发, 不需要中间人攻击, 没有安全风险, 在此不多做讨论。
当目标网站需要拦截时( 例如github) , 就需要通过中间人攻击修改请求或者请求其他替代网站, 从而达到加速的目的。
例如加速github就需要修改如下几处
1. 直连访问github需要修改tls握手时的sni域名, 规避***的sni阻断问题。
2. asserts.github.com等静态资源拦截替换成fastgit.org的镜像地址
DevSidecar在第一次启动时会在本地随机生成一份根证书, 当有用户访问github时, 就用这份根证书来签发一份假的叫github.com的证书。
如果浏览器事先信任了这份根证书, 那么就可以正常访问DevSidecar返回的网页内容了。
## 二、信任根证书有安全风险吗
1. 根证书是DevSidecar第一次启动时本地随机生成的, 除了你这台电脑没人知道这份根证书的内容。
2. 代理请求目标网站时会校验目标网站的证书(除非关闭了`代理校验ssl`)。
> 两段链路都是安全的,所以信任根证书没有问题。
> 但如果应用本身来源不明,或者`拦截配置`里的替代网站作恶,则有安全风险。
> 对于应用来源风险:
> 请勿从未知网站下载DevSidecar应用, 认准官方版本发布地址
> [Github Release](https://github.com/docmirror/dev-sidecar/releases)
>
> 或者从源码自行编译安装
> 对于拦截配置里的替代网站风险:
> 1. 尽量缩小替代配置的范围
> 2. 不使用来源不明的镜像地址,尽量使用知名度较高的镜像地址
> 3. 你甚至可以将其他拦截配置全部删除, 只保留github相关配置
>