在本指南中,您将逐步学习如何在 Apache 上安装 SSL 证书。本教程适用于 Apache 2.4(当前稳定版本系列)。
目录
如何在 Apache 上生成 CSR 代码?
证书签名请求(Certificate Signing Request),简称 CSR,是一个包含您的域名所有权和/或公司信息的小型文本文件。生成 CSR 是购买 SSL 证书流程中不可或缺的一步,所有商业证书颁发机构都要求 SSL 申请者完成此步骤。
您有两种选择:
- 使用我们的 CSR Generator 自动生成 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 bundle 合并为一个”完整链”文件。自 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(以及 mod_headers,步骤 4 中设置 HSTS 头部时需要用到):
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)虚拟主机。一个完整的现代虚拟主机配置如下所示:
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 (enable only after HTTPS works)
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
请将 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 stapling,可使用 Mozilla SSL Configuration Generator 生成定制化配置。OCSP stapling 还需要在 Apache 全局配置中添加 SSLStaplingCache 指令。
步骤 5:将 HTTP 重定向到 HTTPS
为确保访客始终访问您网站的安全版本,请在端口 80 上添加第二个虚拟主机,将所有 HTTP 流量永久重定向到 HTTPS:
ServerName www.example.com
Redirect permanent / https://www.example.com/
步骤 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(安全套接层),现已由 TLS(传输层安全)继承,是一种加密协议,用于加密两个网络端点之间的通信,例如 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 引用该文件。


