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 证书包合并为一个”完整证书链”文件。自 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.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)虚拟主机。一个完整的、符合现代标准的虚拟主机配置如下所示:

<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 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(安全套接层,Secure Sockets Layer)现已被 TLS(传输层安全协议,Transport Layer Security)取代,是一种加密协议,用于加密两个网络端点之间的通信,例如 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 证书. 将复杂的网络安全主题转化为清晰, 引人入胜的内容. 通过有影响力的叙述, 为提高数字安全作出贡献.