MRRC Modern — 本机证书信任体检（CertDoctor）
============================================================

这是在干什么
------------
"接入云端"报 CERTIFICATE_VERIFY_FAILED / certificate has expired 时，原因几乎总
不在这台机器的网络、也不在门户那一侧，而在**这台机器的证书库**：应用（Python/OpenSSL）
只认本机证书库，库里只要留着一份"和设备在用的证书链同名同密钥、但已经过期"的旧证书
（Windows 会把见过的中间证书缓存进库里，Let's Encrypt 的中间证书换代重签，缓存那份到期
后就是这个形态），它就会被放进链里，判"已过期"。浏览器用自己那一套根证书，所以同一台
机器上浏览器照样能打开门户 —— 这正是这个故障最迷惑人的地方。

本工具做三件事：
  1. 读事实：时钟/校时、代理设置、DNS 与 TCP、应用日志里那条报错原文、
     门户实际下发的证书链、本机四张证书库里的 Let's Encrypt/ISRG 家族清单；
  2. 判定：把本机证书库导出，用 openssl 对"门户下发的那条链"复现应用的判定
     （这一步给出的就是应用那条路径的判词，并指出是哪一张证书、在哪个库里）；
  3. 修复（只有加 -Fix 才做）：把**能证明就是它**的过期证书备份后删掉；如果删完变成
     "找不到签发者"，再问你是否导入当前的两张 Let's Encrypt 根证书。

怎么用
------
  1) 把整个 ZIP 解压到一个文件夹（必须整个解压：里面自带 openssl.exe，
     那正是让本工具的判词与应用一致的东西）；
  2) 只体检：双击 MRRC-CertDoctor.cmd
     体检 + 修复：先打开一个命令提示符，进到这个文件夹，运行
        MRRC-CertDoctor.cmd -Fix
     （修复会逐项问你 y/N，删除前一律备份；机器级证书库需要管理员，脚本会提示）
  3) 结束后，桌面会多出：
        MRRC-CertDoctor-<时间>\report.txt   —— 报告（要发给我们的就是它）
        MRRC-CertDoctor-<时间>.zip          —— 同样内容打好的包
  4) 修好后：从托盘退出 MRRC Modern，再启动它；然后浏览器里
     ☰ -> 接入云端 (Cloud Hub) -> 呼号 + 运维给你的那条一次性口令 -> 申请入口/接入。

安全边界
--------
  * 不加 -Fix 时完全只读：只往自己的报告目录里写文件。
  * 只动证书库里的证书；不碰配置、不碰应用目录、不碰代理设置、不碰注册表其它键。
  * 每删一张证书都先备份到 report 目录里的 removed-certs\，报告里写着恢复命令
    （certutil -f -addstore <Root|CA> <那个 .pem>），可随时装回。
  * 无法证明是它导致的证书，只报告、不删除。

如果修不好
----------
  把桌面上的那个 zip（或 report.txt）发给运维/支持。报告里已经包含定位所需的全部
  事实（时钟、代理、链上每张证书、库里每张相关证书），我们据此就能继续判断 ——
  必要时会给你一条不走应用 Python 通道的手动登记路径。
