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從 file 中尋找.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 Incognito 或 FF/Safari 私有窗口,甚至以前肯定從未請求過域的計算機上的瀏覽器)中通過的證書是我一個月前生成的舊證書 - 見下文:

舊證書詳細信息

有什麼想法為什麼會發生這種情況嗎?

答案1

事實證明,出於某種原因,所頒發的憑證是預設的 Apache“snakeoil”憑證。我透過以下方式建立了這一點:

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

/etc/apache2/sites-available/default-ssl..它從引用蛇油證書的文件中返回 2 行。我註解掉了這些行,瀏覽器現在會返回自訂憑證。

答案2

此類問題的常見根源是多個正在執行的 Apache 實例。配置變更由您(重新)啟動的進程獲取,但請求由使用舊配置運行的舊進程提供服務。

停止服務:

service apache2 stop

檢查該網站是否仍然可以訪問。如果是,那麼您已經確定了原因。

現在運行

ps aux | grep apache

它將為您提供正在運行的 apache2 進程及其 PID 的清單。將它們全部殺死(注意,此命令也可能返回名稱/用戶等中包含 Apache 的不相關進程,例如 Apache Tomcat,您可能不想殺死它們。)

kill <pid>

再次運行 ps aux 並確保進程不再運行。

再次檢查網站是否可訪問。不應該的。

現在啟動apache服務

service apache2 start

驗證是否正在提供新證書。

如果您不想殺死進程,可以重新啟動系統。也會有同樣的效果。

相關內容