通配符SSL证书(*.example.com)可统一保护所有二级域名,需正确部署证书、为各子域单独配置VirtualHost并复用同一证书路径,且确保SNI启用;但不覆盖根域或三级域名。

确认通配符证书已正确获取并验证
通配符证书必须由 CA 签发给 `*.example.com`(注意开头的星号和点),不能是 `example.com` 或 `www.example.com`。申请时需使用 DNS 验证方式(Let’s Encrypt 或商业 CA 均支持),并在域名 DNS 中添加 `_acme-challenge.example.com` 的 TXT 记录。验证通过后,你会拿到:
-
域名证书文件(如
example.com.crt或_wildcard.example.com.pem) -
私钥文件(
example.com.key,严禁泄露或重命名) -
中级证书链(
ca_bundle.crt或intermediate.pem,用于构建信任链)
将证书文件放入安全位置并设好权限
推荐统一存放在 `/etc/ssl/certs/` 和 `/etc/ssl/private/` 下,例如:
/etc/ssl/certs/wildcard.example.com.crt/etc/ssl/private/wildcard.example.com.key/etc/ssl/certs/ca-bundle.crt
执行权限控制(防止私钥被非 root 用户读取):
sudo chmod 600 /etc/ssl/private/wildcard.example.com.key<br>sudo chmod 644 /etc/ssl/certs/wildcard.example.com.crt /etc/ssl/certs/ca-bundle.crt
配置 Apache 虚拟主机支持通配符域名
在 Apache 2.4+ 中,只需为每个子域名单独写一个 `
<VirtualHost *:443><br> ServerName shop.example.com<br> DocumentRoot /var/www/shop<br> SSLEngine on<br> SSLCertificateFile /etc/ssl/certs/wildcard.example.com.crt<br> SSLCertificateKeyFile /etc/ssl/private/wildcard.example.com.key<br> SSLCertificateChainFile /etc/ssl/certs/ca-bundle.crt<br></VirtualHost><br><br><VirtualHost *:443><br> ServerName api.example.com<br> DocumentRoot /var/www/api<br> SSLEngine on<br> SSLCertificateFile /etc/ssl/certs/wildcard.example.com.crt<br> SSLCertificateKeyFile /etc/ssl/private/wildcard.example.com.key<br> SSLCertificateChainFile /etc/ssl/certs/ca-bundle.crt<br></VirtualHost>
✅ 这样配置后,`shop.example.com` 和 `api.example.com` 都能用同一张通配符证书建立 HTTPS 连接。
⚠️ 注意:通配符证书不保护 `example.com`(根域)或 `a.b.example.com`(三级子域)。如需根域,必须额外加入 `ServerAlias example.com`,或另购 SAN 证书包含根域。
确保 SNI 已启用且无冲突
Apache 默认开启 SNI(要求 2.2.12+ 或 2.4+),无需额外开启指令。但务必检查:
- 已加载
mod_ssl:运行apachectl -M | grep ssl应看到ssl_module (shared) - 未设置
SSLStrictSNIVHostCheck on(该指令会拒绝不匹配 SNI 的请求,一般应关闭或不写) - 所有 `
` 块前无需加 NameVirtualHost *:443(Apache 2.4+ 已废弃此指令)
重启服务生效:sudo systemctl restart httpd(CentOS)或 sudo systemctl restart apache2(Ubuntu)。


















