什么是系统,版本...

什么是系统,版本...

我有一个 perl 脚本,运行 openssl 来本地检查证书的有效性。我不想只设置一个环境变量然后就走开。这更像是我的 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。这正是 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 不能正常工作。这是完全更新的 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.

答案1

我很确定这不是您在运行命令之前设置环境变量的方式。

https://www.gnu.org/software/bash/manual/html_node/The-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

反而。

答案2

我在这里看到两个问题。

首先,正如 RyanTM 提到的,您没有正确设置环境变量。 exit 0 来自set,而不是 openssl 命令。

其次,X509_V_FLAG_TRUSTED_FIRST不是环境变量。在 OpenSSL 中将其用作环境变量不会产生任何作用。

请参阅手册页以了解更多详细信息。请注意,这是来自“man3”,用于 C 库函数。

相关内容