我有一个perl脚本,它运行openssl在本地检查证书的有效性。我不想设置一个env var然后走开。对于我的openssl安装或配置来说,这更像是有趣的事情。
我正在本地验证来自Letsencrypt的证书。这是一个20.04焦距系统。Openssl是OpenSSL 1.1.1f 31 Mar 2020,所以我希望它能够愉快地验证证书,即使使用新的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的选择产生了疑问。这正是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好吧,好吧。这个选项应该在默认情况下,因为OpenSS1.1.1上(这就是这个系统,见上文)。所以我明确的把它包括进去应该没什么区别。
但最终我尝试将它指定为env。等等,哇?为什么指定这个环境变量将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.发布于 2021-10-11 20:04:48
我非常肯定,在运行命令之前,不是这样设置环境变量的。
https://www.gnu.org/software/bash/manual/html_节点/-Set-Builtin.html
举个例子,我想你会想要
X509_V_FLAG_TRUSTED_FIRST=1 openssl verify -trusted_first -verbose -purpose sslserver -CAfile /path/redacted/chain.pem /path/redacted/cert.pem而不是。
发布于 2023-05-03 06:44:41
我在这里看到两个问题。
首先,正如RyanTM所提到的,您没有正确地设置环境变量。出口0来自set,而不是openssl命令。
第二,X509_V_FLAG_TRUSTED_FIRST不是环境变量。使用它作为环境变量在OpenSSL中不会起任何作用。
undefined注意:这是来自"man3“的,它用于C库函数。
https://askubuntu.com/questions/1368003
复制相似问题