如何根据请求域动态设置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 握手时加载的。
我正在尝试使用 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 握手时加载的。