自签名证书能让 HTTPS 服务跑起来,但浏览器默认不信任它。笔者在访问自建的 fastOnto 服务时,就遇到了这个问题。本文整理从服务器导出证书到各平台导入的完整流程,帮助初学者少走弯路。
整个流程可以概括为三个阶段:服务器导出公钥证书、确认证书包含正确的 IP SAN、在客户端按平台导入并重启浏览器。
flowchart LR A"服务器:导出公钥证书\
fullchain.pem → .crt" --> B"校验证书\
subject / SAN / SHA-256 指纹" B --> C{"包含 IP SAN?"} C -- "否" --> D"停止导入\
检查证书生成配置" C -- "是" --> E"安全传输 .crt 到客户端" E --> F"按平台导入证书" F --> G"彻底退出并重开浏览器" G --> H"访问 https://\[已脱敏IP:8025"]
01 | 先导出可导入的证书
关键原则:只导入公钥证书,不要导入 privkey.pem。注意:把自签名证书放入"受信任的根证书颁发机构"后,该证书在理论上可被用于签发任意站点,因此只应在你完全控制的客户端上操作。
在服务器上执行:
bash
cd /home/alfred/projects/fastOnto
openssl x509 \
-in .runtime/tls/fullchain.pem \
-out .runtime/tls/fastonto-[已脱敏IP].crt
然后把 fastonto-[已脱敏IP].crt 安全传到需要访问 fastOnto 的客户端电脑。
导入前先确认证书包含 IP SAN:
bash
openssl x509 \
-in .runtime/tls/fastonto-[已脱敏IP].crt \
-noout -subject -ext subjectAltName -fingerprint -sha256
输出中应看到 IP Address:[已脱敏IP]。
02 | Windows:Chrome / Edge
- 双击
.crt文件; - 选择"安装证书";
- 选择"本地计算机"(此步通常需要管理员权限,若选项不可用请以管理员身份运行安装程序);
- 选择"将所有的证书都放入下列存储";
- 选择"受信任的根证书颁发机构";
- 完成后彻底退出并重新打开 Chrome / Edge;
- 访问
https://[已脱敏IP]:8025。
03 | macOS:Chrome / Safari
- 双击
.crt; - 在"钥匙串访问"中导入到"系统"钥匙串;
- 双击导入的证书;
- 展开"信任";
- 将"使用此证书时"设置为"始终信任";
- 输入 macOS 管理员密码;
- 彻底退出并重新打开浏览器。
04 | Firefox
Firefox 可能使用自己的证书库:
- 设置;
- 隐私与安全;
- 证书;
- 查看证书;
- "颁发机构";
- 导入
fastonto-[已脱敏IP].crt; - 勾选"信任此 CA 用于标识网站"。
05 | Linux Chromium / Chrome
可优先从浏览器的"设置 → 隐私和安全 → 安全 → 管理证书 → 颁发机构"导入。
若界面没有可用入口,使用 NSS 用户证书库(需先安装 certutil,例如 Debian/Ubuntu 执行 sudo apt install libnss3-tools,RHEL 系执行 sudo dnf install nss-tools):
bash
mkdir -p "$HOME/.pki/nssdb"
certutil -d "sql:$HOME/.pki/nssdb" -N --empty-password
certutil -d "sql:$HOME/.pki/nssdb" \
-A \
-n "fastOnto self-signed HTTPS" \
-t "C,," \
-i fastonto-[已脱敏IP].crt
然后彻底退出并重开浏览器。再次访问 https://[已脱敏IP]:8025,若地址栏不再提示证书不受信任,说明导入生效。
06 | 几点注意事项
- 只应在你控制的客户端导入;
- 不要传播或导入
.runtime/tls/privkey.pem; - 若重新生成服务器自签名证书,客户端需要重新导入;
- 长期更推荐创建一个内部 CA,再由内部 CA 签发 fastOnto 服务证书,之后客户端只需信任一次内部 CA。
关注我,和AI一起成长~