Apache不特殊识别通配符证书,仅按X.509规则验证:必须同时配置SSLCertificateFile(含*.example.com的SAN)、SSLCertificateKeyFile(匹配私钥)和SSLCACertificateFile(或合并中间证书),缺一不可,否则客户端信任链断裂导致HTTPS失败。

Apache 本身不特殊识别“通配符证书”,它只按标准 X.509 规则验证证书是否匹配请求域名、是否有效、签名是否可信。所以配置通配符证书的关键,不是加什么特殊指令,而是确保三项核心文件正确加载且链路完整:终端证书(含 *.example.com 的 SAN)、对应私钥、以及中间证书(补全信任链)。
必须同时配置的三个指令
仅设置 SSLCertificateFile 是无效的——它只告诉 Apache “公钥证书在哪”,但缺少私钥无法解密,缺少中间证书会导致客户端(尤其是 iOS、Android 或旧版 Windows)无法构建信任链,直接报“证书不可信”或连接失败。
-
SSLCertificateFile:指向通配符证书主体文件(如
wildcard.example.com.crt),该文件必须包含DNS:*.example.com在 Subject Alternative Name 中; -
SSLCertificateKeyFile:指向与证书配对的私钥文件(如
example.com.key),必须未加密(或已配置SSLPassPhraseDialog); -
SSLCACertificateFile(推荐)或
SSLCertificateChainFile(旧版):用于加载中间证书。Apache 2.4.8+ 更推荐合并使用SSLCertificateFile,把终端证书和中间证书拼成一个文件(终端在前、中间紧随其后)。
推荐写法:合并证书 + 单独私钥
这是目前最简洁、兼容性最好的方式,避免因多文件路径或顺序出错导致部署失败。
- 将下载的
_public.crt(终端证书)和_chain.crt(中间证书)用文本编辑器合并为一个文件,例如wildcard_full.pem; - 确认合并后文件开头是
-----BEGIN CERTIFICATE-----,接着是通配符证书内容,再紧接着是中间证书内容(也以-----BEGIN CERTIFICATE-----开头); - 在虚拟主机配置中写入:
SSLEngine on SSLCertificateFile /etc/ssl/cert/wildcard_full.pem SSLCertificateKeyFile /etc/ssl/cert/example.com.key
- 无需再设
SSLCACertificateFile,因为中间证书已内嵌。
验证是否生效
配置完成后别急着重启,先做两件事确认内容无误:
- 运行
openssl x509 -in /etc/ssl/cert/wildcard_full.pem -text -noout | grep -A1 "DNS\|CN",检查输出中是否有DNS:*.example.com; - 用
curl -Iv https://test.example.com(注意用实际子域名)测试,返回中应出现SSL certificate verify ok,且无unable to get local issuer certificate类错误; - 浏览器访问任意一级子域名(如
api.example.com、shop.example.com),地址栏应显示锁形图标,点击可查看证书信息并确认主体为*.example.com。
注意事项
通配符证书有明确作用范围,配置再正确也无法绕过这个限制:
-
*.example.com只匹配www.example.com、mail.example.com这类一级子域名; - 它不匹配根域名
example.com(需额外添加到 SAN 或另配单域名证书); - 它也不匹配二级子域名,如
a.b.example.com(除非证书 SAN 中明确写了*.b.example.com或a.b.example.com); - 确保 DNS 已将所有要保护的子域名解析到该服务器 IP,且 443 端口开放、
mod_ssl模块已启用(httpd -M | grep ssl可确认)。











