# 前言

什么是 CA 根证书,这篇文章讲的很详细

CA 证书详解

CA 根证书一般都会预装在我们的系统中,构建信任体系的基础

但如果有第三方有风险的 CA 根证书被添加至计算机的根证书受信列表之中,那么整个整个信任体系则可能随时会崩塌

一切基于 PKI 体系的证书信任就会变成一个笑话,最经典的攻击则是 “中间人攻击”

看似加密传输,实则在攻击者的监控下已是和明文传输没什么两样

这里就不得不提一下 CNNIC 证书事件了(反复鞭尸),有兴趣的朋友可以自行去搜索

并且在国内很多流氓软件都会将自己的根证书在未经用户允许的情况下安装进用户计算机中

而这些流氓软件背后的团队很多都是没有维护 CA 根证书的资质,一旦根证书密钥泄露,用户将面临巨大的安全风险

tips:本教程将着重讲述 Windows 系统下的方法

# Windows

我们这里采用微软提供的证书检查工具 Sigcheck

tips: 使用此工具就意味着你需要信任微软,但话说回来如果你不信任微软,我觉得也就没必要使用 Windows 了😂

Sigcheck

下载完工具后运行

1
sigcheck.exe -tuv
1
sigcheck.exe -tv

tips: 没有定位到程序当前文件夹下的命令行请补全程序路径

-tuv 检查用户证书,-tv 检查计算机证书

运行完毕就会在窗口里打印出与 Microsoft 受信任证书的列表不符的证书

注:有些证书来自于系统某些功能产生的自签根证书,请仔细辨别,删除该证书可能会导致不可预知的问题

确认要删除的证书后运行 certlm.msc(管理计算机根证书)和 certmgr.msc(管理用户根证书)

找到风险证书然后删除即可

目前在我计算机上发现的有几个加速器的自签根证书以及自己的自签根证书

# Linux

Linux 版本众多,我仅在我的机器上做实验,所以不同发行版可能有出入

本次教程使用的 Linux 发行版为 Debian 5.10.120-1 (2022-06-09) x86_64 GNU/Linux

Linux 使用的检查工具不同,我使用的是 ctlcheck

  • 比较当前系统 CA 与 CCADB(或 Apple 等)的最新数据之间的差异
  • 显示供应商已删除的证书(Mozilla、Apple、Microsoft 等)和未知证书
  • 可以将自签名证书或公司根证书添加到允许列表

截止于写稿前,该程序作者尚未编译二进制程序,所以需要自行下载编译

此程序采用 go 编写,如果未安装 GO 请自行去官网安装 GO

tips: 最好从官网安装最新版的 go,apt 仓库内的 1.15 版本 golang 在编译时会出现缺少依赖库的问题

从 github 上 clone 项目(没装 git 就直接下载 zip 吧)

1
git clone https://github.com/canstand/ctlcheck

clone 完成进入项目文件夹,编译项目

1
go build main.go

等待编译完成… …

编译完成后给编译出来的 main 文件赋予可执行权限

1
chmod +x main

运行 main 程序

1
./main

等待几秒后即可完成检查

我们需要重点关注未过期的 Removal 和 Unknown 的证书

# 删除证书

1
sudo dpkg-reconfigure ca-certificates

在显示的 GUI 界面中取消选择有风险的证书(空格选择,enter 保存并退出)

完成后再执行一次检查查看是否生效

# 后记

Android 目前还未进行实验,不过我也觉得没必要了,装在手机上的国内流氓软件(包括但不限于 N#9P:e4"kn)早就已经嗯。。。

所以重要私密资料请脱机保存,读取时请尽量使用没有任何 “tag” 的设备进行读取

iOS 不用担心,你只需要信任 Apple 就行,如果你不信任 Apple,那也没必要用 iPhone 了

macOS 我还未进行测试,如果 ctlcheck 在 macOS 平台编译后也能使用,则教程跟着上方 Linux 来就行

唯一不同的是证书好像是在钥匙串里