如何根据请求域动态设置SSL证书?

How to set SSL certificates dynamically based on request domain?

我正在尝试使用 SSL 设置动态 apache 虚拟主机配置。

假设我有 3 个域 example1.com、example2.com 和 example3.com,它们的项目文件夹位于 /var/www/html/.
例如
example1.com - /var/www/html/示例 1/
example2.com - /var/www/html/示例 2/
example3.com - /var/www/html/示例 3/

我已将 apache 配置为从域中形成自引用 URL,将 UseCanonicalName 设置为 Off。参考了此文档 here。 我的 conf 看起来像这样

UseCanonicalName Off
VirtualDocumentRoot /var/www/html/%1
<Directory /var/www/html>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
    Require all granted
</Directory>

它对 HTTP 请求工作正常。

第 1 期
我想动态包含 SSL 证书但失败了。我尝试添加

SSLEngine on
SSLCertificateFile /home/abc/certs/%1/domain.crt
SSLCertificateKeyFile /home/abc/certs/%1/domain.key
SSLCertificateChainFile /home/abc/certs/%1/domain.ca-bundle

它抛出了

SSLCertificateFile: file '/home/abc/certs/%1/domain.crt' does not exist or is empty

我该如何解决这个问题?有没有办法从数据库设置 ssl?

第 2 期\

使用上述虚拟主机配置后,apache 无法映射专用服务器名称。

UseCanonicalName Off
VirtualDocumentRoot /var/www/html/%1
<Directory /var/www/html>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
    Require all granted
</Directory>
<VirtualHost *:80>
    ServerName dev.example.com
    DocumentRoot /var/www/html/devportal
    <Directory "/var/www/html/devportal">
        Options Indexes FollowSymLinks Multiviews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

上面的 VirtualDocumentRoot 覆盖了其他 virutalhost 块。当我尝试将 VirtualDocumentRoot 包含在 VirtualHost 块中时,dev.example.com 有效,但其他域指向默认的 apache html。 我无法弄清楚我在这里犯了什么错误。

 SSLCertificateFile /home/abc/certs/%1/domain.crt

这是不可能的。它需要有一个静态路径名,因为证书是在启动时加载的,而不是在 TLS 握手时加载的。