核心是启用SNI并为每个<VirtualHost *:443>块独立配置SSLEngine、SSLCertificateFile、SSLCertificateKeyFile及ServerName,禁用全局SSL指令,确保证书域名匹配、私钥权限600、Listen 443已声明且通过configtest验证。

Apache 中为多个虚拟主机配置独立 SSL 证书,核心是启用 SNI(Server Name Indication)并确保每个 <VirtualHost *:443> 块完全独立声明证书路径和 SSL 参数。不能复用全局证书,也不能靠 ServerAlias 堆叠多个域名共用一套证书。
必须启用 SNI 并确认环境支持
SNI 是 TLS 层协议特性,允许客户端在握手初期发送目标域名,服务器据此选择对应证书。它要求:
- Apache 编译时链接的 OpenSSL ≥ 1.0.2(推荐 ≥ 1.1.1),可通过
openssl version和httpd -V | grep -i openssl验证 - mod_ssl 模块已启用:
a2enmod ssl(Debian/Ubuntu)或检查httpd.conf中LoadModule ssl_module modules/mod_ssl.so未被注释 - 配置中存在
Listen 443(通常在ports.conf或httpd.conf中) - 客户端(如浏览器、curl)支持 SNI —— 现代系统均支持,仅极老旧环境(如 Windows XP + IE6)例外
每个 HTTPS 虚拟主机必须独占完整 SSL 配置
不能在主配置或 <VirtualHost _default_:443> 中设置 SSLCertificateFile 等指令,否则会被继承覆盖。每个域名需一个独立的 <VirtualHost *:443> 块,且包含:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
ServerName example.com(必需)和可选的ServerAlias www.example.com SSLEngine on-
SSLCertificateFile /path/to/example.com/fullchain.pem(含域名证书+中间证书) -
SSLCertificateKeyFile /path/to/example.com/privkey.pem(私钥,权限建议600) - 若证书链未合并进
fullchain.pem,则补上SSLCertificateChainFile
例如:
<VirtualHost *:443>
ServerName site-a.test
DocumentRoot "/www/site-a"
SSLEngine on
SSLCertificateFile "/ssl/site-a/fullchain.pem"
SSLCertificateKeyFile "/ssl/site-a/privkey.pem"
<Directory "/www/site-a">
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerName site-b.test
DocumentRoot "/www/site-b"
SSLEngine on
SSLCertificateFile "/ssl/site-b/fullchain.pem"
SSLCertificateKeyFile "/ssl/site-b/privkey.pem"
<Directory "/www/site-b">
Require all granted
</Directory>
</VirtualHost>
验证配置是否生效
配置完成后务必执行以下检查:
- 语法检查:
apachectl configtest或apache2ctl configtest - 查看实际加载的虚拟主机顺序:
apachectl -t -D DUMP_VHOSTS,确认每个域名都对应正确的*:443块,且无未匹配的默认主机抢答 - 用 OpenSSL 测试 SNI 是否工作:
openssl s_client -connect example.com:443 -servername example.com -showcerts 2>/dev/null | openssl x509 -noout -text | grep -A1 "Subject Alternative Name",确认返回的证书 SAN 包含该域名 - 浏览器访问时检查地址栏锁图标,点击查看证书详情,确认颁发对象与当前域名一致
证书本身要匹配域名
即使 Apache 配置正确,证书不合规也会触发浏览器警告。务必确认:
- 证书的 Subject Alternative Name (SAN) 字段明确列出当前访问的完整域名(如
example.com和www.example.com需同时存在) - 不推荐用单域名证书硬配多个子站;若子域较多,可考虑通配符证书(
*.example.com),但注意它不覆盖三级域名(如api.dev.example.com) - 自签名或内网证书需手动导入客户端信任库,否则仍会报错

















