在本指南中,您将逐步学习如何在 Apache 上安装 SSL 证书。这些说明适用于 Apache 2.4,即当前的稳定版本系列。
目录
如何在 Apache 上生成 CSR 代码?
证书签名请求(Certificate Signing Request),简称 CSR,是一个包含您域名所有权和/或公司信息的小型文本文件。生成 CSR 是购买 SSL 证书流程中不可或缺的一部分,所有商业证书颁发机构都要求 SSL 申请者完成此步骤。
您有两种选择:
- 使用我们的CSR 生成器自动生成 CSR。
- 按照我们的分步教程学习如何在 Apache 上创建 CSR。
在 Apache 上安装 SSL 证书
在证书颁发机构签署并向您发送 SSL 证书后,您就可以安全地将其安装到您的 Apache 服务器上了。请按照以下步骤操作。
步骤 1:准备您的证书文件
下载并解压从证书颁发机构收到的 ZIP 文件夹。您通常会找到以下文件:
- .crt 文件 – 您的主 SSL 证书。
- .ca-bundle 文件 – 构成信任链的中间证书(和根证书)。此链是浏览器和应用程序验证您证书所必需的。如果没有它,某些客户端可能会将您的网站标记为不安全。
将这些文件连同您在生成 CSR 时一起生成的私钥(.key)上传到服务器上的一个安全目录,例如 /etc/ssl/。请确保私钥只有 root 用户可读(chmod 600)。
推荐做法(Apache 2.4.8 及更新版本):将您的证书与 CA 证书包合并为一个”完整证书链”文件。自 Apache 2.4.8 起,SSLCertificateFile 指令可以直接从该文件中加载中间证书,因此不再需要旧版的 SSLCertificateChainFile 指令:
cat your_domain.crt your_domain.ca-bundle > your_domain_fullchain.crt
如果您的 CA 提供的中间证书是单独的文件,请先将您的证书与这些中间证书连接起来,中间证书的顺序应从签署您证书的那个开始,一直到根证书(根证书本身是可选的):
cat your_domain.crt intermediate.crt root.crt > your_domain_fullchain.crt
例如,在安装 Sectigo PositiveSSL 证书时,您需要将您的域名证书与 Sectigo 中间证书包连接起来。请始终使用您的 CA 提供的确切文件名。
步骤 2:启用 SSL 模块(mod_ssl)
在配置 HTTPS 之前,请确保 Apache 的 SSL 模块已启用。
在 Debian/Ubuntu 上,启用 mod_ssl(以及您在步骤 4 中配置 HSTS 头部时需要用到的 mod_headers):
sudo a2enmod ssl
sudo a2enmod headers
在 RHEL/CentOS/AlmaLinux/Rocky Linux 上,安装 SSL 模块软件包(该模块安装后会自动加载):
sudo dnf install mod_ssl
步骤 3:定位 Apache 配置文件
根据您的操作系统和 Apache 版本,配置文件可能位于不同的文件中。请在以下位置之一查找 httpd.conf、apache2.conf 或专门的 SSL/站点配置文件:
- Debian/Ubuntu:主配置文件为 /etc/apache2/apache2.conf;各站点的配置文件在 /etc/apache2/sites-available/ 中。
- RHEL/CentOS/AlmaLinux/Rocky:主配置文件为 /etc/httpd/conf/httpd.conf;SSL 配置文件为 /etc/httpd/conf.d/ssl.conf。
提示:如果您的 Apache 服务器运行在 Ubuntu 上,您也可以参考我们专门的Ubuntu SSL 安装说明。
步骤 4:配置虚拟主机
首先,备份您当前的配置文件。这样一来,如果出现问题,您可以快速恢复更改:
sudo cp /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.backup
现在打开配置文件并设置 HTTPS(端口 443)虚拟主机。一个完整的、符合现代标准的虚拟主机配置如下所示:
<VirtualHost *:443>
ServerName www.example.com
ServerAdmin [email protected]
DocumentRoot /var/www/example
SSLEngine on
# Apache 2.4.8+ : server certificate + intermediate chain in ONE file
SSLCertificateFile /etc/ssl/example_com_fullchain.crt
SSLCertificateKeyFile /etc/ssl/example_com.key
# Recommended TLS hardening (2026)
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLHonorCipherOrder off
# Tell browsers to always use HTTPS. Remove the leading # to enable HSTS,
# but only after you have confirmed HTTPS works correctly:
# Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
ErrorLog ${APACHE_LOG_DIR}/example_error.log
CustomLog ${APACHE_LOG_DIR}/example_access.log combined
</VirtualHost>
将 example.com、文档根目录以及文件路径替换为您自己的值。以下是关键指令的作用说明:
- SSLEngine on – 为此虚拟主机启用 SSL/TLS。
- SSLCertificateFile – 指向您在步骤 1 中创建的完整证书链文件(证书 + 中间证书)的路径。在 Apache 2.4.8 及以上版本中,这一条指令即可替代已弃用的 SSLCertificateChainFile。
- SSLCertificateKeyFile – 指向您与 CSR 一同生成的私钥的路径。
- SSLProtocol -all +TLSv1.2 +TLSv1.3 – 禁用旧版、不安全的 SSL/TLS 协议,仅允许使用 TLS 1.2 和 TLS 1.3。
- Strict-Transport-Security(HSTS)- 指示浏览器仅通过 HTTPS 连接。需要 mod_headers(在步骤 2 中已启用)。只有在确认 HTTPS 正常工作后才应启用它。
请确保这些行都不以 # 开头(这样会将它们注释掉)。在 Debian/Ubuntu 上,${APACHE_LOG_DIR} 会解析为 /var/log/apache2;在基于 RHEL 的系统上则应使用 /var/log/httpd/。
旧版服务器:如果您使用的 Apache 版本低于 2.4.8,请将证书和证书链保存在单独的文件中,并在 SSLCertificateFile 下方添加已弃用的 SSLCertificateChainFile /etc/ssl/example_com.ca-bundle 指令。在任何现代服务器上,都建议采用上述完整证书链的方式。
高级加固(可选):要获得更强的密码套件和 OCSP 装订支持,您可以使用 Mozilla SSL 配置生成器生成一份定制配置。OCSP 装订还需要在您的全局 Apache 配置中添加 SSLStaplingCache 指令。
启用该站点:在 Debian/Ubuntu 上,放置在 /etc/apache2/sites-available/ 中的虚拟主机在您启用它之前不会被加载。如果您将此配置保存为一个新文件(例如 example-ssl.conf),请使用以下命令激活它:
sudo a2ensite example-ssl.conf
您也可以直接编辑系统自带的 default-ssl.conf,但同样需要通过 a2ensite default-ssl 来启用它。在 RHEL/CentOS/AlmaLinux/Rocky 上,/etc/httpd/conf.d/ 中的文件会自动加载 —— 但请注意,ssl.conf 本身已自带一个使用自签名证书的默认 <VirtualHost _default_:443> 配置块,因此您应该编辑该配置块,或者将您的虚拟主机添加为单独的文件(如 /etc/httpd/conf.d/yourdomain.conf),以避免出现两个重叠的 443 端口主机。
步骤 5:将 HTTP 重定向到 HTTPS
为了确保访问者始终能够访问您网站的安全版本,请添加第二个位于端口 80 的虚拟主机,将所有 HTTP 流量永久重定向到 HTTPS:
<VirtualHost *:80>
ServerName www.example.com
Redirect permanent / https://www.example.com/
</VirtualHost>
步骤 6:测试您的配置并重启 Apache
在重启之前,请务必先测试您的配置。语法错误可能会导致您的网站下线,因此请运行:
sudo apachectl configtest
如果一切正确,您将看到:
Syntax OK
现在通过重新加载 Apache 来应用更改(重新加载会在不断开现有连接的情况下激活新配置):
sudo systemctl reload apache2 # Debian/Ubuntu
sudo systemctl reload httpd # RHEL/CentOS/AlmaLinux/Rocky
如果重新加载还不够,请改为重启该服务(sudo systemctl restart apache2 或 httpd)。在没有 systemd 的旧系统上,请使用 sudo apachectl graceful。
如果安装成功,恭喜您!您的网站现在已通过 SSL/TLS 得到保护。
测试您的 SSL 安装
在 Apache 上安装 SSL 证书后,请验证一切是否按预期工作。即时扫描将揭示任何可能影响您证书性能的错误或漏洞。使用我们的SSL Checker 工具来检查您安装的状态。
您还可以直接从命令行确认证书及其证书链:
openssl s_client -connect www.example.com:443 -servername www.example.com
在哪里购买适用于 Apache 的 SSL 证书?
购买适用于 Apache 的 SSL 证书的最佳选择是 SSL Dragon。我们在整个 SSL 产品系列中提供无与伦比的价格和折扣,并精心挑选了市场上最优秀的 SSL 品牌,为您的网站配备坚不可摧的保护。我们所有的 SSL 证书都兼容 Apache。立即获取 SSL 证书!
请注意,SSL/TLS 证书的有效期正在缩短:最长有效期将在 2026 年 3 月降至 200 天,2027 年降至 100 天,到 2029 年仅为 47 天。有效期缩短意味着续期更加频繁,因此值得提前规划好您的续期流程(以及自动化方案)。
常见问题
SSL(安全套接层,Secure Sockets Layer)现已被 TLS(传输层安全协议,Transport Layer Security)取代,是一种加密协议,用于加密两个网络端点之间的通信,例如 Apache 这样的 Web 服务器与用户浏览器之间的通信。
在 Debian 和 Ubuntu 发行版上,在配置中搜索 SSL 协议指令:grep -ir SSLProtocol /etc/apache2/
如果 SSL 已配置,您将看到类似以下的输出:/etc/apache2/mods-available/ssl.conf:SSLProtocol +TLSv1.2 +TLSv1.3
您还可以确认 SSL 模块是否已加载到正在运行的服务器中:apachectl -M | grep ssl
根据您的操作系统和设置的不同,配置文件可能位于不同的位置。在 Debian/Ubuntu 上,请检查 /etc/apache2/apache2.conf 以及 /etc/apache2/sites-available/ 中各站点的文件。在 RHEL/CentOS/AlmaLinux/Rocky 上,请检查 /etc/httpd/conf/httpd.conf 和 /etc/httpd/conf.d/ssl.conf。
SSLCertificateFile 指向您的服务器证书。自 Apache 2.4.8 起,同一文件也可以包含中间证书,从而提供完整的证书链。SSLCertificateChainFile 是旧版单独提供这些中间证书的方式,但自 Apache 2.4.8 起已被弃用。在任何现代服务器上,都应将证书和中间证书放在同一个文件中,并仅通过 SSLCertificateFile 来引用它。


