apache虚拟主机https天然隔离,每个块独立定义证书、私钥、日志及ssl参数,文件路径须物理分离,权限设为600,ssl指令严禁置于全局配置,所有设置必须限定在对应虚拟主机内。

Apache 虚拟主机中 HTTPS 本身天然隔离——每个 <virtualhost></virtualhost> 块就是独立作用域,证书、密钥、文档根目录、日志路径、SSL参数等全部按站点单独定义,互不影响。
证书与密钥文件必须物理分离
每个站点必须使用自己专属的证书链和私钥文件,不能共用同一组文件:
- 证书文件(
SSLCertificateFile)和私钥(SSLCertificateKeyFile)路径需指向不同文件,例如:/etc/ssl/sites/site-a.crt和/etc/ssl/sites/site-a.key;/etc/ssl/sites/site-b.crt和/etc/ssl/sites/site-b.key - 中间证书(
SSLCertificateChainFile或现代推荐的SSLCACertificateFile)也应各自匹配,避免混用导致链验证失败 - 私钥权限必须设为
600(仅属主可读),且 Apache 进程用户(如www-data或apache)要有读取权限
SSL 配置参数按站点独立设置
SSL 协议、加密套件、会话缓存等均在 <virtualhost></virtualhost> 内部配置,不会跨站继承:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 可用
SSLProtocol单独禁用旧协议(如all -SSLv3 -TLSv1),各站可不同 -
SSLCipherSuite可为高安全站点启用更强套件,为兼容性要求高的站点保留部分旧套件 -
SSLSessionCache推荐用shmcb并指定独立路径(如"shmcb:/var/run/apache2/ssl_scache_sitea(512000)"),避免多站争用同一缓存区
避免 HTTP 与 HTTPS 混淆导致的逻辑耦合
常见错误是把重定向或 HSTS 等全局策略写错位置,破坏隔离性:
- 强制跳转 HTTPS 应放在对应站点的
<virtualhost></virtualhost>块里,用Redirect permanent / https://site-a.example.com/,而不是在主配置中统一处理 - HSTS 头(
Strict-Transport-Security)应在<virtualhost></virtualhost>中用Header always set单独设置,max-age 可按站点安全等级差异化(如后台系统设 31536000,静态页设 3600) - 不要在
httpd.conf根层级写 SSL 相关指令;所有 SSL 指令必须严格限定在某个<virtualhost></virtualhost>内部
验证是否真正隔离
检查手段要具体到单个站点:
- 用
openssl s_client -connect site-a.example.com:443 -servername site-a.example.com查看返回的证书 Subject CN 是否匹配该站域名 - 访问
https://site-a.example.com和https://site-b.example.com,分别检查响应头中的Server、Strict-Transport-Security是否不同 - 查看各站错误日志(
ErrorLog指定路径),确认 TLS 握手失败、证书过期等错误只出现在对应日志中,不交叉出现










