访问可信人项目时,如何信任 HTTPS 证书?

访问其他 IP 上可信人的项目时,对方也启用了 HTTPS。用户没有登录对方服务器的权限,无法像在自己服务器上那样导出证书。这种情况下,证书该怎么信任?其实不需要登录对方服务器:HTTPS 服务在握手时会把公钥证书发送给客户端,用户可以获取它,再导入信任库。

01 | 先区分两种情况

第一种,对方使用公网 CA 证书。浏览器通常会自动信任,无需额外操作。

第二种,对方使用自签名或内部 CA 证书。这时需要对方提供证书或内部 CA 根证书,再由用户导入。
flowchart TD A"访问对方 HTTPS 项目" --> B{"证书由谁签发?"} B -->|"公网 CA"| C"浏览器自动信任" B -->|"自签名 / 内部 CA"| D"需要获取证书并导入信任库" D --> E"推荐:项目方提供证书" D --> F"备选:自行提取证书" E --> G"导入受信任根证书颁发机构" F --> H"核对 SHA-256 指纹" H --> G

02 | 推荐方式:让项目方提供证书

请对方提供类似 xxx-ca.crt 的文件。优先要内部 CA 根证书,不要只要某个服务器的叶子证书。拿到后,按对应系统的步骤导入"受信任根证书颁发机构"。

03 | 无需服务器权限,自行提取证书

假设对方项目地址是 https://[已脱敏IP]:8443,用户可在自己电脑执行:

bash 复制代码
openssl s_client \
  -connect [已脱敏IP]:8443 \
  -showcerts \
  </dev/null 2>/dev/null |
openssl x509 -outform PEM > other-project-leaf.crt  # 仅导出第一张(叶子)证书;如需完整链请另行拆分 -showcerts 输出

查看指纹和 SAN:

bash 复制代码
openssl x509 \
  -in other-project.crt \
  -noout \
  -subject \
  -issuer \
  -ext subjectAltName \
  -fingerprint -sha256

关键一步:通过电话、企业 IM、工单等独立渠道,向项目负责人核对 SHA-256 指纹。确认一致后,可将 other-project.crt 导入浏览器或系统信任库用于临时访问;但更推荐向对方索取内部 CA 根证书并导入"受信任根证书颁发机构",避免把单张叶子证书当作长期根信任。

不要只因为浏览器页面能打开、命令能下载到证书就直接信任。首次获取自签名证书时,仍可能遭遇中间人替换。
sequenceDiagram participant U as 用户 participant S as 对方 HTTPS 服务 participant O as 项目负责人 U->>S: openssl s_client 发起握手 S-->>U: 返回公钥证书 U->>U: 导出 other-project.crt 并计算 SHA-256 指纹 U->>O: 通过电话 / 企业 IM / 工单核对指纹 O-->>U: 确认指纹一致 U->>U: 导入浏览器或系统信任库

此外,如果导入证书还是发现不行,通常是 SAN 没有正确指定。例如该证书是自签名证书,subject = issuer,但它存在关键问题:No extensions in certificate,也就是它没有 Subject Alternative Name(SAN)。因此,即使把它导入受信任根证书库,现代 Chrome / Edge 访问 https://[已脱敏IP]:8443(示例端口,请替换为实际端口) 仍很可能报"名称不匹配",因为现代浏览器要求 SAN 中明确包含 IP Address:[已脱敏IP]。CN=XX_Server 不能替代 IP SAN。

用户可以通过企业 IM、电话等独立渠道向对方项目负责人确认拿到的叶子证书 SHA-256 指纹(以下为本案例示例,实际应以对方确认为准):

2E:4E:C8:40:F8:55:42:2B:F9:09:33:8D:DB:50:B7:75:30:4C:CB:1D:80:6C:05:0E:65:68:58:64:BC:88:B9:AE

但更正确的处理是让对方重新签发证书,至少带 subjectAltName = IP:[已脱敏IP]。如果对方使用域名访问,则应带 subjectAltName = DNS:实际域名。最好由内部 CA 签发;用户只需导入其 CA 根证书,而不是每个项目单独导入一张服务器自签名证书。
flowchart TD A"已导入证书但仍报错" --> B{"证书是否包含 SAN?"} B -->|"无 SAN(No extensions)"| C"浏览器报名称不匹配" B -->|"有 SAN"| D{"SAN 是否匹配访问地址?"} D -->|"IP 访问"| E"需含 IP:\[已脱敏IP"] D -->|"域名访问"| F"需含 DNS:实际域名" C --> G"请对方重新签发证书" E --> G F --> G G --> H"最好由内部 CA 签发" H --> I"只需导入 CA 根证书"

04 | 浏览器方式

在证书告警页或地址栏锁图标中,依次选择"查看证书 → 详细信息 → 导出"(不同浏览器和系统菜单名称可能不同)。导出 .crt 后,先按前文方法核对 SHA-256 指纹,再导入"受信任根证书颁发机构";若对方使用内部 CA,优先导入其 CA 根证书。

若对方未来更换自签证书,需要重新验证并导入新证书;若其使用内部 CA,则只需信任一次 CA 根证书。


关注我,和AI一起成长~