apache 上的 SSL 续订证书继续使用旧证书文件

SSL renew certificate on apache keeps using old certtificate file

我正在尝试更新我的 SSL 证书,但我可能遗漏了一些问题。在我完成以下步骤后,服务器 继续使用旧证书 我不知道为什么。 这是我所做的:

  1. 创建新的 csr 文件 (domain.csr) + 密钥文件 (domain.key)
  2. openssl req -new -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr

  3. 复制 csr 文件内容并将其粘贴到我的 ssl 提供商 + 获得批准。

  4. 从他们那里得到5个文件并上传到服务器(domain.der,domain.pem ,domain.cer, chain.cer , 域.p7b)
  5. 在 apache ssl.conf 文件 上设置, SSLCertificateFile (domain.cer) SSLCertificateKeyFile (domain.key).
  6. 重启apache

出于某种原因,我的服务器仍在使用我的旧证书。

是我做错了什么吗?

嗯,你自己想出来了,但如果其他人遇到同样的情况,这里有一些你可以检查的东西。

首先在本地检查这是否有效,通过 运行 服务器上的以下 openssl 命令(我们跳过了关键步骤!):

openssl s_client -connect localhost:443

这将显示 Apache 提供给客户端的证书。如果那不是正确的,那么您就知道 Apache 配置有问题。如果是正确的,那么下游就是问题了。

在您的情况下,您在负载均衡器处终止了 SSL,而忘记在那里更改证书。另一个问题可能是浏览器缓存 SSL 证书(重新启动它,Ctrl+F5 强制刷新或更好地尝试其他浏览器或第三方网站,如 ssllabs.com)。

假设这是 Apache 的问题,那么您需要检查配置以检查证书的所有实例是否已被替换。以下命令将显示所有虚拟主机及其配置的配置:

/usr/local/apache2/bin/apachectl -S

或者只需使用标准的 find 和 grep unix 命令来搜索 Apache 配置以查找旧证书或新证书:

find /usr/local/apache2/conf -name "*.conf" -exec grep olddomain.cer {} \; -print

这两个命令都假定 apache 安装在 /usr/local/apache2 中,但要根据需要更改路径。

如果一切看起来都不错,并且您肯定已经重新启动了 Apache,那么您可以尝试完全停止并重新启动,因为我注意到有时 Apache 的正常重新启动并不总是选择新的配置。在再次启动 Web 服务器备份之前,请检查您无法从浏览器连接(以确保您正在连接到您认为正在连接的服务器)并且使用以下命令该过程已关闭:

ps -ef | grep httpd

然后终于开始了。

另一件要检查的事情是你正在安装的证书是你认为的那个,使用这个 openssl 命令打印出证书详细信息(假设证书是 x509 格式,但对于其他格式也有类似的命令):

openssl x509 -in domain.cer -text

最后但并非最不重要的一点是检查 Apache 日志文件以查看其中是否有任何错误。虽然预计这意味着没有证书被加载而不仅仅是旧的。

@Barry 的回答很好。

另一方面是apache不是最前端的网络服务器。来自 this 次对话。有可能apache前面还有其他的web服务器。 像-nginx。在我们的例子中是 AWS ELB。我们必须更改 ELB 中的证书才能更改。

我们遇到了与@Akshay 上面所说的类似问题。

为了让服务器更新证书,我们必须 运行 Google 云计算引擎负载均衡器的一些命令:

gcloud compute target-https-proxies update

希望这对使用 GCP 托管 apache 的人有所帮助。