我有一个运行 openssl 以在本地检查证书有效性的 perl 脚本。我不想只是设置一个环境变量然后走开。这感觉更像是我的 openssl 安装或配置很有趣
系统是什么,版本...
我正在本地验证来自 Letsencrypt 的证书。这是一个 20.04/Focal 系统。Openssl 是OpenSSL 1.1.1f 31 Mar 2020
,所以我希望它能够愉快地验证证书,即使 LE 使用新的 ISRG 根证书“交叉签名”它们。
然而,一旦旧的 X3 证书过期,这些错误就开始了……
openssl verify -verbose -purpose sslserver -CAfile /path/redacted/chain.pem /path/redacted/cert.pem
C = US, O = Internet Security Research Group, CN = ISRG Root X1.
error 2 at 2 depth lookup: unable to get issuer certificate.
error /path/redacted/cert.pem: verification failed
这感觉很奇怪。一些挖掘使我想-trusted_first
知道openssl verify
. 如果未启用trusted-first 选项,这正是openssl会抱怨的。但是,尝试显式启用该选项没有任何影响:
openssl verify -trusted_first -verbose -purpose sslserver -CAfile /path/redacted/chain.pem /path/redacted/cert.pem
C = US, O = Internet Security Research Group, CN = ISRG Root X1
error 2 at 2 depth lookup: unable to get issuer certificate
error /path/redacted/cert.pem: verification failed
好的。自 openssl 1.1.1 以来,该选项应默认启用(即该系统,见上文)。所以我明确包括它应该没有什么区别。
但最终我尝试将其指定为环境变量。等等,哇?为什么指定此环境变量会修复 openssl 的行为以信任它在链中找到的第一个根证书:
set X509_V_FLAG_TRUSTED_FIRST openssl verify -trusted_first -verbose -purpose sslserver -CAfile /path/redacted/chain.pem /path/redacted/cert.pem
…以退出值为零运行。
缩小
我不明白为什么 openssl 不能正常工作(tm)。这是一个完全更新的 20.04。较新的 ISRG 根证书已安装/etc/ssl/certs/ISRG_Root_X1.pem
并且update-ca-certificates
很高兴:
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
我很确定这不是您在运行命令之前设置环境变量的方式。
https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
例如,我认为您想要类似的东西
反而。