Ssl

文件存在時如何有條件地設置 SSLCertificateFile?

  • February 18, 2022

我正在使用 Let’s Encrypt ( certonly) 為託管在 Apache 伺服器上的多個網站生成 SSL 證書。這些證書的文件位置在創建之前就已確定,因此我提前將它們的路徑寫入我的虛擬主機配置中。一旦站點執行,我將使用certbot獲取證書文件,然後重新載入 Apache 配置。

我還有一個用有效文件定義的全域 SSL 證書,所以每個 SSL 虛擬主機都肯定有一個證書。

我遇到的問題是 Apache 在沒有所有證書文件的情況下無法執行,儘管有全域備份。我嘗試僅在文件存在時使用 有條件地配置 Let’s Encrypt 證書IF,但 Apache 說SSLCertificateFile not allowed here

SSLCertificateFile僅當新證書文件存在時,我如何才能覆蓋全域?我正在嘗試執行所有這些操作,而無需在生成證書之前和之後修改配置。

這是我嘗試過的:

<If "-f '/etc/letsencrypt/live/domain/fullchain.pem'">
 SSLCertificateFile /etc/letsencrypt/live/domain/fullchain.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/domain/privkey.pem
</If>

→ SSLCertificateFile not allowed here

在這種情況下,我將為每個域創建一個符號連結目錄,並為尚未配置的域使用伺服器的蛇油證書(或您之前提到的“全域”證書)。例如:

$ ls -1 /etc/ssl/domains
example.com/fullchain.pem -> /etc/letsencrypt/live/example.com/fullchain.pem
example.com/privkey.pem -> /etc/letsencrypt/live/example.com/privkey.pem
second-example.com/fullchain.pem -> /etc/ssl/certs/ssl-cert-snakeoil.pem
second-example.com/privkey.pem -> /etc/ssl/private/ssl-cert-snakeoil.key

然後,您可以設置 Apache 指令以使用符號連結目錄:

SSLCertificateFile /etc/ssl/domains/example.com/fullchain.pem
SSLCertificateKeyFile /etc/ssl/domains/example.com/privkey.pem

這樣做的好處是在為域生成 Let’s Encrypt 證書時只需要替換符號連結,但是在安裝完整證書之前訪問域的使用者將收到警告,因為蛇油證書是自簽名的。

引用自:https://serverfault.com/questions/846576