Ubuntu 20.04配置带本地CA证书的代理失败,寻求有效解决方法
我来帮你排查下这个问题,之前也碰到过类似的场景,你的操作步骤大体方向是对的,但可能漏了几个关键细节,试试下面这些方法:
检查证书转换的正确性
先确认转换后的.crt文件是标准的PEM格式,执行cat CompanyCA.crt看看内容开头是不是-----BEGIN CERTIFICATE-----,结尾是不是-----END CERTIFICATE-----。如果不是,说明转换命令可能没适配你的.cer文件格式,可以去掉-inform der参数重新转换试试:openssl x509 -in CompanyCA.cer -out CompanyCA.crt openssl x509 -in CompanyRootCA.cer -out CompanyRootCA.crt让OpenSSL自动识别原证书的格式,避免强制指定DER格式出错。
确认证书的权限与存放规范
拷贝到/usr/local/share/ca-certificates/的证书文件,权限必须是644,且归属为root:root,否则系统可能无法读取。执行下面的命令修正:chmod 644 /usr/local/share/ca-certificates/*.crt chown root:root /usr/local/share/ca-certificates/*.crt强制更新证书缓存并查看日志
执行带详细输出的更新命令,确认证书是否被成功加载:update-ca-certificates -v如果输出里出现
Adding debian:CompanyCA.crt、Adding debian:CompanyRootCA.crt这类提示,说明证书已经被识别;如果显示0 added, 0 removed; done,那大概率是证书格式还是有问题,或者文件名后缀不是.crt(你已经转成crt了,这个概率低,但可以再确认)。配置系统级与工具级代理(重中之重)
你提到必须通过代理才能上网,光装证书还不够,得让所有系统工具都走代理:- 临时生效代理:
设置完后再试export http_proxy=http://你的代理IP:端口 export https_proxy=http://你的代理IP:端口curl https://example.com,看看是否还需要-k参数。 - 永久配置系统代理:
创建/etc/profile.d/proxy.sh文件,写入以下内容:
执行export http_proxy=http://你的代理IP:端口 export https_proxy=http://你的代理IP:端口 export no_proxy=localhost,127.0.0.1,localaddress,.localdomain.comsource /etc/profile.d/proxy.sh让配置立即生效,重启后也会自动加载。 - 给APT单独配置代理:
创建/etc/apt/apt.conf.d/80proxy文件,写入:
这样APT就能通过代理访问,并且使用你安装的CA证书做验证。Acquire::http::Proxy "http://你的代理IP:端口"; Acquire::https::Proxy "http://你的代理IP:端口";
- 临时生效代理:
验证证书是否真正被系统信任
用OpenSSL命令直接验证目标网站的证书信任情况:openssl s_client -connect example.com:443 -CAfile /etc/ssl/certs/ca-certificates.crt看输出末尾是否有
Verify return code: 0 (ok),如果有,说明证书已经生效,问题可能出在代理配置没到位;如果还是有错误,那得回头重新检查CA证书本身的有效性(比如是否过期、链是否完整)。
备注:内容来源于stack exchange,提问作者Green 绿色

