[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

当 LetsEncrypt 的 ROOT 证书过期时,我无法从旧操作系统访问它。

在加拿大,当我在星巴克点餐时,他们会问我的名字(在日本他们会问我吗?)即使我说“Seiken”,他们也根本不明白我的名字。
我是一个胆怯的圣人,总想着下次用一个花哨的英文名,但到了时候却不好意思说出来。

10 月 1 日之后无法使用 HTTPS 连接到某些网站?

由于“DST Root CA”在 10 月 1 日之后过期,当“DST Root CA
看来有很多人遇到同样的问题,所以我希望这篇文章对他们有所帮助。

发生的现象

连接使用LetsEncrypt(ROOT证书中“ISRG Root X1”和“DST Root CA X3”的交叉根证书)的站点时出现SSL错误

按操作系统分类的原因和解决方案

对于 CentOS7、Amazon Linux、Amazon Linux2

最有可能的是,操作系统上安装的 ROOT 证书较旧,并且操作系统的 ROOT 证书树中不存在“ISRG Root X1”根证书,请使用以下命令 Sho 更新 ROOT 证书。
yum -y 更新 ca 证书
如果openssl版本较旧(1.0.1或更低)也会出现此问题,因此在这种情况下,也请将openssl更新到最新版本。

CentOS6及常见错误

跨根证书的验证需要openssl 1.0.2或更高版本,但对CentOS6的支持已经结束,仅提供1​​.0.1以下的版本。
在openssl1.0.1及以下版本中,未实现SSL证书部分链功能,因此无法正确验证证书,会出现SSL通信错误。
以下是一些常见错误模式的示例。

wget 示例

使用 wget https://LetsEncrypt 证书的站点
执行结果
--2021-10-04 20:06:18-- https://使用 LetsEncrypt 证书的站点/ 正在使用 LetsEncrypt 证书解析站点... xx.xx.xx.xx 连接到 cLetsEncrypt 的证书 |xx.xx.xx.xx |:443...已连接。错误:无法验证由“/C =US/O=Let's Encrypt/CN=R3”颁发的 LetsEncrypt 证书:颁发的证书已过期。要不安全地连接到使用 LetsEncrypt 证书的站点,请使用“-”。 -无检查证书'。

openssl 命令示例

openssl s_client -connect 使用 LetsEncrypt 证书的站点:443 -servername 使用 LetsEncrypt 证书的站点 < /dev/null
执行结果
CONNECTED(00000003) ~省略~ 开始时间: 1633378075 超时: 300 (秒) 验证返回码: 10 (证书已过期) --- 完成

使用 openssl 库进行通信的 php 程序示例(可能是 libssl.so.10)

使用 get_file_contents 函数的程序中的证书验证失败,如下所示。
示例代码
<?php $url = "https://LetsEncryptの証明書を利用しているサイト/"; $output = file_get_contents($url); var_dump($output);
执行结果
PHP 警告:file_get_contents():SSL 操作失败,代码为 1。OpenSSL 错误消息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:第 3 行“执行程序”中的证书验证失败 PHP 警告:file_get_contents():无法启用加密第 3 行的“执行程序” PHP 警告:file_get_contents(https://使用 LetsEncrypt 证书的站点/):无法打开流:第 3 行“执行的程序”中的操作失败 bool(false )

使用curl命令或php的curl函数时不会出现该问题。

我想这可能是因为curl命令使用的密码通信相关库不仅包括openssl系列的libssl.so.10,还包括NSS系列的libssl3.so。
ldd /usr/bin/curl | grep ssl | ldd /usr/bin/curl | grep ssl

libssl3.so => ​​/usr/lib64/libssl3.so (0x00007f43fc44b000)
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f43fb1c5000)

ldd /usr/bin/wget | grep ssl | ldd /usr/bin/wget | grep ssl

libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f79a04c6000)

ldd /usr/bin/openssl | grep ssl | ldd /usr/bin/openssl |

libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f2872a3a000)

rpm -qf /usr/lib64/libssl3.so

nss-3.44.0-7.el6_10.x86_64

rpm -qf /usr/lib64/libssl.so.10

openssl-1.0.1e-58.el6_10.x86_64

为了解决问题

您需要修改程序以使用curl命令或基于curl的库,或者使用openssl版本1.0.2或更高版本。
如上所述,CentOS6 不提供高于 1.0.1 的版本,因此如果很难修改程序,可以通过从 CentOS7 存储库获取 SRPM、针对 CentOS6 进行修改、构建并安装来解决问题这是可以避免的。
原来的故事。
*尽管此过程在我们公司实际运行的服务器上有经过验证的跟踪记录,但请注意,我们无法确认所有 openssl 功能的影响和操作。
*基本上,我们建议更新操作系统。

CentOS6上强制安装openssl1.0.2的步骤

从 srpm 创建 rpm 包

从 CentOS7 存储库获取 openssl 1.0.2 srpm 包

cd /usr/local/src wget --no-check-certificate https://vault.centos.org/7.9.2009/updates/Source/SPackages/openssl-1.0.2k-21.el7_9.src.rpm rpm -我openssl-1.0.2k-21.el7_9.src.rpm

*在执行rpm命令的用户的主目录下会创建一个名为rpmbuild的目录,并且源代码被提取到那里,因此将其移动到那里。

cd ~/rpmbuild

修改SPEC文件

*“%patch68”是一个不必要的过程,所以将其注释掉。

sed -i -e“s/%patch68/#%patch68/g”规格/openssl.spec

 

修改补丁文件

*名为 secure_getenv 的 glibc 函数在 CentOS6 中不可用,因此将其替换为 getenv。

sed -i -e“s/secure_getenv/getenv/g”源/openssl-1.0.2a-env-zlib.patch sed -i -e“s/secure_getenv/getenv/g”源/openssl-1.0.2j-deprecate -algos.patch sed -i -e "s/secure_getenv/getenv/g" SOURCES/openssl-1.0.2a-fips-ctor.patch

 

构建rpm包

*如果构建所需的工具尚未安装,请在rpmbuild之前安装。

yum install rpm-build krb5-devel zkib-devel lksctp-tools-devel zlib-devel gcc rpmbuild -ba SPECS/openssl.spec

 

安装rpm包

安装所需的包(perl-WWW-Curl)作为依赖项

yum 安装 perl-WWW-Curl

 

移动到构建rpm包的目录并使用rpm命令安装它

cd RPMS/rpm -Uvh openssl-*

 

检查版本是否正确更新

openssl 版本

*如果是1.0.2k则成功。

 

禁用 DST 根 CA X3 证书

*如果 DST 根 CA

更新操作系统根证书

yum 更新 ca 证书

 

启用 update-ca-trust 功能并使用 update-ca-trust 命令更新一次根证书

更新 ca-trust 启用更新 ca-trust

* 使用 yum update ca-certificates 更新根证书后,操作系统的受信任根证书(/pki/tls/certs/ca-bundle.crt)文件不仅包含证书内容,还包含颁发者、到期日期等。该评论现已包含在内。

在此状态下操作系统的运行没有问题,但如果运行不带参数的 update-ca-trust 命令,操作系统的受信任根证书将被组织成仅包含证书内容和注释的文件。
请务必运行以下命令以确保仅提取证书部分。

仅提取“DST Root CA X3”证书并将其保存为 /etc/pki/ca-trust/source/blacklist/ 下的文件

perl -e 'while(<>){last if $_ =~ m/DST Root CA X3/;}print $_;while(<>){last if length($_)==1;print $_} '</etc/pki/tls/certs/ca-bundle.crt > /etc/pki/ca-trust/source/blacklist/DST_Root_CA_X3.pem

*如果创建一个名为 /etc/pki/ca-trust/source/blacklist/DST_Root_CA_X3.pem 的文件,内容如下所示,则可以。如果这不起作用,您可以手动创建该文件。

#DST 根 CA b290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJ KoZIhv CNAQEBBQADggEPADCCAQoCggEB AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOE 5CjH9UL2AZd+3UWODYOKIYepLYYHsumu5ouJLGiifSKOeDNoJjj4XLh7dIN9b xiqKqy69ck3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw 7BZy1SbsOFU5Q9D8/RhcQPGX 69 Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD aeQQmxkqtilX4+U9m5/ wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BA​​UwaWEB/zAOBgNV HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYk QMA0GCSqG SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9Lww mglSBd49lZRNI+DT69 ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz srzJmwN0jP41ZL9c8 PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo Ob8VZRzI9neWagqNdw vYkQsEjgfbKbYK7p2 CNTUQ -----结束证书------

禁用“DST Root CA X3”证书

更新 ca-trust 摘录
grep "DST 根 CA X3" /etc/pki/tls/certs/ca-bundle.crt

*如果没有任何显示就OK了。

grep "ISRG 根 X1" /etc/pki/tls/certs/ca-bundle.crt

*如果显示#ISRG Root X1,则OK。

更新后,尝试运行导致错误的程序,看看问题是否得到解决。

如果服务器上正在运行提供SSL的服务(例如Apache),我们建议重新启动该服务。

 

如果您觉得这篇文章有帮助,请点赞!
3
加载中...
3 票,平均:1.00 / 13
26,237
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者

佐藤圣坚

我在紧要关头有很好的第六感,但我基本上是一个老派工程师。目前,
我在加拿大办事处工作。