核心是每个块独立声明证书路径,禁用全局ssl配置;需满足apache≥2.2.12、mod_ssl启用、openssl≥1.0.2、listen 443已声明、防火墙放行443端口,并确保servername与证书域名精确匹配、私钥权限为600、配置通过configtest验证后reload生效。

Apache 虚拟主机中为不同站点分别指定 SSL 证书,核心是「每个 <virtualhost></virtualhost> 块独立声明自己的证书路径」,不能共用全局配置,也不能混用文件。只要 Apache 启用了 SNI 支持(2.2.12+ 默认支持),一台服务器一个 IP 就能跑多个 HTTPS 站点,各自用各自的证书。
确保底层支持已就绪
这是多证书生效的前提,缺一不可:
- 运行
httpd -V | grep -i ssl或apache2ctl -V | grep -i ssl,确认输出含 OpenSSL 版本(建议 ≥ 1.0.2) - 检查
mod_ssl已启用:a2enmod ssl(Debian/Ubuntu)或确认LoadModule ssl_module modules/mod_ssl.so在主配置中未被注释(RHEL/CentOS) - 确认
Listen 443已在ports.conf或httpd.conf中声明 - 防火墙放行 443 端口:
ufw allow 443或firewall-cmd --permanent --add-port=443/tcp
每个站点配独立的 VirtualHost 和证书路径
禁止在主配置或全局 ssl.conf 中设置 SSLCertificateFile 或 SSLCertificateKeyFile。必须为每个域名写一个专属的 <virtualhost></virtualhost> 块,并在里面明确指定三类文件:
-
SSLEngine on—— 必须开启,否则不加载证书 -
ServerName example.com和ServerAlias www.example.com—— 必须与证书的 SAN(Subject Alternative Name)或主域名完全一致 SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pemSSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem-
SSLCertificateChainFile /etc/ssl/certs/example.com.chain.crt(仅 Apache fullchain.pem 已含中间证书)
注意:site-a.com 和 site-b.com 的证书路径必须指向不同文件,哪怕文件名相似,内容也不能复用。
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
文件权限与存放位置要安全且可读
Apache 主进程以 root 运行,但子进程通常以 www-data 或 apache 用户身份读取私钥,因此:
- 私钥文件(
.key)权限必须设为600:chmod 600 /etc/ssl/private/example.com.key - 证书文件(
.crt或.pem)权限可设为644 - 推荐将各站点证书隔离存放,例如:
/etc/ssl/certs/site-a.com.crt、/etc/ssl/private/site-a.com.key
验证配置并重载服务
改完配置后别直接重启,先做两步检查:
- 运行
apachectl configtest或apache2ctl configtest,确保返回Syntax OK - 确认没有报错如
SSLCertificateFile: file '/xxx' does not exist或Permission denied - 无误后执行
systemctl reload apache2(Debian/Ubuntu)或systemctl reload httpd(RHEL/CentOS)
浏览器访问 https://example.com,点击地址栏锁图标查看证书详情,确认显示的是你刚配置的域名和有效期。










