Nat*_*han 5 ssl apache-2.4 lets-encrypt
我正在使用 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>
Run Code Online (Sandbox Code Playgroud)
??SSLCertificateFile not allowed here
小智 8
您可以使用IfFile代替If:
<IfFile "/etc/letsencrypt/live/www.example.com/fullchain.pem">
SSLEngine on
...
</IfFile>
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为IfFile条件是在启动时评估的:
Encloses directives that will be processed only if file exists at startup
Run Code Online (Sandbox Code Playgroud)
而在运行时If评估:
Contains directives that apply only if a condition is satisfied by a request at runtime
Run Code Online (Sandbox Code Playgroud)
配置 SSLEngine 必须在启动时完成,不能在运行时完成。
引用来自Apache 2.4 Core Features 文档。
在这种情况下,我将为每个域创建一个符号链接目录,并为您尚未配置的域使用服务器的蛇油证书(或您之前提到的“全局”证书)。例如:
$ 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
Run Code Online (Sandbox Code Playgroud)
然后,您可以设置 Apache 指令以使用符号链接目录:
SSLCertificateFile /etc/ssl/domains/example.com/fullchain.pem
SSLCertificateKeyFile /etc/ssl/domains/example.com/privkey.pem
Run Code Online (Sandbox Code Playgroud)
这样做的优点是,在为域生成 Let's Encrypt 证书时只需要替换符号链接,但是在安装完整证书之前访问该域的用户将收到警告,因为蛇油证书是自签名的。
| 归档时间: |
|
| 查看次数: |
2088 次 |
| 最近记录: |