bg-tutorials

如何在 Apache 上安装 SSL 证书

在本指南中,您将逐步学习如何在 Apache 上安装 SSL 证书。本教程适用于 Apache 2.4(当前稳定版本系列)。

目录

如何在 Apache 上生成 CSR 代码?

证书签名请求(Certificate Signing Request),简称 CSR,是一个包含您的域名所有权和/或公司信息的小型文本文件。生成 CSR 是购买 SSL 证书流程中不可或缺的一步,所有商业证书颁发机构都要求 SSL 申请者完成此步骤。

您有两种选择:

在 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.confapache2.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 apache2httpd)。在不支持 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 天。有效期缩短意味着需要更频繁地续期,因此提前规划续期流程(及自动化方案)非常值得。

常见问题

Apache 中的 SSL 是什么?

SSL(安全套接层),现已由 TLS(传输层安全)继承,是一种加密协议,用于加密两个网络端点之间的通信,例如 Apache 等 Web 服务器与用户浏览器之间的通信。

如何判断 Apache SSL 是否已启用?

在 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

Apache 中的 SSL .conf 文件在哪里?

配置文件可能根据您的操作系统和设置位于不同位置。在 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 和 SSLCertificateChainFile 有什么区别?

SSLCertificateFile 指向您的服务器证书。自 Apache 2.4.8 起,同一文件也可以包含中间证书,从而提供完整的证书链。SSLCertificateChainFile 是单独提供中间证书的旧方式,但自 Apache 2.4.8 起已被弃用。在任何现代服务器上,请将证书和中间证书放在同一文件中,并仅使用 SSLCertificateFile 引用该文件。

立即订购 SSL 证书, 可节省 10% 的费用!

快速发行, 强大加密, 99.99% 的浏览器信任度, 专业支持和 25 天退款保证. 优惠券代码 SAVE10

龙飞行的详细图像
撰写人

经验丰富的内容撰稿人, 擅长 SSL 证书. 将复杂的网络安全主题转化为清晰, 引人入胜的内容. 通过有影响力的叙述, 为提高数字安全作出贡献.