Apache 提供旧的 SSL 证书

Apache 提供旧的 SSL 证书

我在 Raspberry Pi (Debian) 上使用 Apache 托管网页,但似乎无法让服务器颁发当前证书。我使用以下命令生成了自签名 SSL 证书/home/pi/ssl/

openssl req -new -sha256 -x509 -nodes -days 365 -out example.com.pem -keyout example.com.key

Apache从文件中查找.pem和文件对,其中包含:.key/etc/apache2/sites-enabled/owncloud.conf

SSLCertificateFile    /home/pi/ssl/example.com.pem
SSLCertificateKeyFile /home/pi/ssl/example.com.key

当我删除这些文件并重新启动 Apache 时,出现错误[FAIL] Reloading web server config: apache2 failed!。在生成新的证书文件对后重新启动时不会发生此错误,因此 Apache 似乎正在调用该证书。

然而,通过浏览器(Chrome 隐身模式或 FF/Safari 私人窗口,甚至是以前从未请求过域名的计算机上的浏览器)获得的证书是我一个月前生成的旧证书 - 如下所示:

旧证书详细信息

知道为什么会发生这种情况吗?

答案1

事实证明,出于某种原因,颁发的证书是默认的 Apache“snakeoil”证书。我通过以下方式确定了这一点:

grep -i -r "SSLCertificateChainFile" /etc/apache2/

.. 它从引用了 Snakeoil 证书的文件中返回了 2 行/etc/apache2/sites-available/default-ssl。我注释掉了这些行,浏览器现在返回了自定义证书。

答案2

此类问题的常见根源是多个正在运行的 Apache 实例。配置更改由您(重新)启动的进程获取,但请求由使用旧配置运行的旧进程处理。

停止服务:

service apache2 stop

检查网站是否仍可访问。如果可以,则您已找到原因。

现在运行

ps aux | grep apache

它将为您提供正在运行的 apache2 进程及其 PID 的列表。将它们全部杀死(请注意,此命令还可能返回名称/用户等中包含 Apache 的无关进程,例如 Apache Tomcat,您可能不想杀死它们。)

kill <pid>

再次运行 ps aux 并确保进程不再运行。

再次检查网站是否可以访问。应该不能。

现在启动 apache 服务

service apache2 start

验证新证书是否正在提供。

如果你不想终止进程,你可以重启系统。效果是一样的。

相关内容