一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何为Apache单个虚拟主机配置专属的SSL证书

时间:2026-07-14 08:58:56 编辑:袖梨 来源:一聚教程网

关键在于为每个块单独指定证书、私钥及证书链路径,确保ServerName与证书域名完全匹配,并正确设置文件权限与Apache模块启用,最后通过configtest验证并重载服务。

为 Apache 单个虚拟主机配置单独的 SSL 证书,关键在于让该站点独享一套证书文件,并与其他站点隔离,避免证书冲突或路径混用。这在多域名、多客户共用一台服务器时尤其常见。

确认 Apache 支持 SNI 并启用 mod_ssl

Apache 2.2.12+ 默认支持 SNI(Server Name Indication),允许多个 HTTPS 虚拟主机共用 443 端口但使用不同证书。需确保:

  • 运行 httpd -vapache2 -v,版本不低于 2.2.12(推荐 2.4.8+)
  • 执行 apachectl -M | grep ssl,输出含 ssl_module (shared)
  • 如未启用:CentOS/RHEL 运行 sudo a2enmod ssl 或确认 LoadModule ssl_module modules/mod_ssl.so 已在主配置中取消注释

为该虚拟主机准备专属证书文件

不要复用其他站点的证书。为当前域名生成或获取独立证书包(如 Let’s Encrypt 的 certbot --cert-name example.com),确保包含:

  • 域名证书(example.com.crtfullchain.pem
  • 私钥(example.com.key,权限严格设为 600
  • 证书链(chain.pem;若用 Let’s Encrypt,fullchain.pem 已含链,可不单独配 SSLCertificateChainFile

统一存入专属目录,例如:
/etc/httpd/ssl/example.com/(CentOS)或
/etc/ssl/certs/example.com/(Ubuntu)

单独编写 <virtualhost></virtualhost>

在站点专属配置文件中(如 /etc/httpd/conf.d/example.com.conf),写明完整 HTTPS 配置,**不与其他站点混用同一 <virtualhost></virtualhost> 块**:

<VirtualHost *:443>    ServerName example.com    ServerAlias www.example.com    DocumentRoot /var/www/example.com<pre class="brush:php;toolbar:false;">SSLEngine onSSLCertificateFile /etc/httpd/ssl/example.com/example.com.crtSSLCertificateKeyFile /etc/httpd/ssl/example.com/example.com.keySSLCertificateChainFile /etc/httpd/ssl/example.com/chain.pem# 推荐加固(可选)SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256

注意:ServerName 必须与证书中 Subject 或 SAN 字段完全匹配,否则浏览器会报“证书不匹配”警告。

禁用 HTTP 访问并重定向到 HTTPS

在同一配置文件中补充 80 端口重定向,确保用户始终走加密连接:

<VirtualHost *:80>    ServerName example.com    ServerAlias www.example.com    Redirect permanent / https://example.com/</VirtualHost>

完成后,检查语法:sudo apachectl configtest,无误则重启服务:sudo systemctl restart httpd(或 apache2)。

热门栏目