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

Posted

技术标签:

【中文标题】如何根据请求域动态设置 SSL 证书?【英文标题】:How to set SSL certificates dynamically based on request domain? 【发布时间】:2021-08-10 22:09:51 【问题描述】:

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

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

我已将 apache 配置为从域设置 UseCanonicalName 到 Off 形成自引用 URL。引用此文档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\

使用上述vhost配置后,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 覆盖了其他虚拟主机块。当我尝试将 VirtualDocumentRoot 包含在 VirtualHost 块中时,dev.example.com 可以工作,但其他域指向默认的 apache html。 我无法弄清楚我在这里犯了什么错误。

【问题讨论】:

【参考方案1】:
 SSLCertificateFile /home/abc/certs/%1/domain.crt

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

【讨论】:

有什么方法可以动态加载 SSL 吗? apache有没有其他解决方案? @Abishek:据我所知,您无法动态加载证书。您需要在配置中静态包含所有域。但如果所有名称都已知,您可以创建涵盖多个名称的证书。 我不会预先知道域,这就是我想让它动态化的原因。无论如何感谢您的回答。

以上是关于如何根据请求域动态设置 SSL 证书?的主要内容,如果未能解决你的问题,请参考以下文章

具有自定义用户域的 SSL

SSL安全证书-概念解析

SSL安全证书-概念解析

ios swift 动态更新 SSL 证书(.cer)文件

ssl证书过期该怎么办?网站如何关掉ssl证书错误?

如何在 nginx 中使用动态 SSL 配置配置动态虚拟主机?