信任已在另一台主机上受信任的 x509 证书

信任已在另一台主机上受信任的 x509 证书

我有两台主机,一台使用 Debian Buster,一台使用 CentOS 7。

我想通过 SSL 连接到 SMTP 服务器。但是,我只能在 CentOS 上执行此操作:

CentOS:

$ openssl s_client -connect smtp.server.com:587
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = server.com
verify return:1
---
Certificate chain
 0 s:/CN=server.com
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---
...

德班:

$ openssl s_client -connect smtp.server.com:587
CONNECTED(00000003)
depth=0 CN = server.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = server.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:CN = server.com
   i:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
---

问题似乎是 Debian 主机缺少 Let's Encrypt 证书或不信任它。

如何将信任从一台机器“转移”到另一台机器?即我如何确保他们都信任相同的证书?

答案1

安装 CA 证书包

首先,您需要确认您的 Debian 机器上是否安装了根 CA 证书包。

跑步:

$ apt list --installed 2>/dev/null | grep ca-certificates

如果输出位于[installed]该行末尾,则表明它已安装,但软件包缺少根 CA 证书 - 跳到下一部分。

如果该命令没有输出任何内容,那么您需要使用以下命令安装 CA 证书:

$ sudo apt install ca-certificates

此时,再次测试您的命令。

如果仍然失败,您需要手动添加根 CA 证书,如下所示:

将根 CA 证书添加到信任锚存储区

如果你读过这里你会看到正确的根是让我们加密 ISRG 根 X1。 Let's Encrypt 颁发 CA (让我们加密权威 X3)已由上述机构签名,并由 Identrust 的根 CA 交叉签名,以提高与旧系统的兼容性。你的 CentOS 机器正在使用后者,但它将于明年到期,因此不值得在你的 Debian 机器中安装。

要让您的 Debian 机器正常工作,请下载让我们加密 ISRG 根 X1从上面的链接并将其保存到您的 Debian 系统(例如ISRG_Root_X1.pem/usr/local/share/ca-certificates/

在继续下一步之前,请确保您确认我提供的链接是真实的(Let's Encrypt 站点)且安全(HTTPS),而不是我试图让您安装伪造的根 CA 证书。

现在运行:

$sudo update-ca-certificates

将新证书添加到您的信任存储区。

如果您确实想使用 Identrust 根 CA 证书,可以从以下位置下载:这里。这是页面上的最后一个链接。

再次尝试你的命令,希望它能起作用。

SMTP 服务器配置错误

如果仍然失败,您需要检查 SMTP 服务器是否将证书链作为 TLS 握手的一部分发送。通常,服务器管理员仅配置终端实体证书并忽略 CA 链。添加-showcerts到 Debian 盒子上的命令并检查是否显示所有证书(PEM 格式)。

如果缺少,请与服务器管理员联系并(友好地)要求他们正确配置服务器。

相关内容