给定:一个绝对隔离的 LAN,具有许多使用本地 CA 服务器的 Web 服务。
所有用户主机都安装了 ca 证书,并且 .crt 文件由update-ca-certificates
.类似浏览器的软件,例如 Chrome 等,无需报告即可运行。
但是每个命令行实用程序(例如curl、git、wget 等)都会遇到错误,因为它们无法验证本地发行者。
来自卷曲的消息:
curl: (60) SSL 证书问题:无法获取本地颁发者证书。
大多数方法只涉及安装互联网范围内的证书包。一些人提到使用 /etc/pki/whitelist 路径和update-ca-trust
脚本,但系统或存储库中都缺少这两者。
主机操作系统:Debian 11
答案1
使用您选择的名称在下面创建一个目录/usr/local/share/ca-certificates
,并将 CA 服务器的公共 CA 证书以 PEM 格式作为文件放入其中*.crt
。然后跑update-ca-certificates
。
它将以多种格式在系统范围内添加您的本地 CA 证书/etc/ssl/certs
:
- 作为 PEM 格式证书的 OpenSSL 样式目录,其符号链接带有证书哈希值,位于
/etc/ssl/certs
- 作为 PEM 格式的所有可信 CA 证书的单个文件,位于
/etc/ssl/certs/ca-certificates.crt
- 以及可以由放置在 中的任何脚本创建的任何其他形式
/etc/ca-certificates/update.d
,例如:- 如果已安装 Java 包,将会有一个
/etc/ca-certificates/update.d/jks-keystore
脚本生成 CA 证书的 JKS 密钥库,如/etc/ssl/certs/java/cacerts
.
- 如果已安装 Java 包,将会有一个
有一个手册页man update-ca-certificates
和更多文档/usr/share/doc/ca-certificates
。但是,除非您彻底阅读所有文档,否则您可能会错过这样一个事实:你需要在下面创建一个目录/usr/local/share/ca-certificates
并将您的 CA 证书放入其中;顶层的任何证书文件/usr/local/share/ca-certificates
都将被忽略。
该update-ca-certificates
命令用于Debian及相关发行版;您update-ca-trust
发现提到的源自 Fedora,并且似乎也用于 Arch(也许还有相关发行版?)。
这两个命令基本上执行相同的工作,尽管它们之间的确切路径名有所不同,因为每个发行版系列都维护了系统范围 CA 证书的稍微不同的目录层次结构。