我正在为内部网构建 openssl 证书颁发机构。
我有root.crt
,intermediate.crt
它由根签名,并且server.crt
由中间签名。
我可以根据根来验证中间结果
#> openssl verify -CAfile root.crt intermediate.crt && echo ok
ok
在 Ubuntu 上我可以安装根证书
#> mv root.crt /usr/local/share/ca-certificates/my-root.crt
#> update-ca-certificates
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
done.
但如果我尝试根据中间件验证服务器,它会失败
#> openssl verify -CAfile intermediate.crt server.crt && echo ok
error 2 at 1 depth lookup:unable to get issuer certificate
我认为这意味着它无法验证完整的链条server.crt -> intermediate.crt -> my-root.crt
。
我已经手动检查了证书openssl x509 -noout -text
并且它们看起来没问题:Issuer
对于server.crt
中间证书的主题匹配,对于其他两个证书,它与根证书匹配并且日期在正确的范围内。
目标是在应用程序中分发服务器和中间证书,并在全球范围内安装根证书。我发誓这个方法之前奏效了,那么我遗漏了什么?