使用 SSL 证书加密来保护 Heroku 应用,对保护用户关键数据、防范漏洞至关重要。SSL 证书对客户端与 Heroku 服务器之间的通信进行加密,任何第三方都无法拦截或读取。如果你还不知道如何在 Heroku 服务器上安装 SSL 证书,本指南将带你逐步完成整个过程。

在安装 SSL 证书之前,你需要先准备好 SSL 证书,并生成 CSR 以便为待保护网站完成验证。

前置条件与第一步:生成 CSR 与私钥

无论使用什么服务器,安装 SSL 证书的第一步都是生成 CSR 与私钥,Heroku 服务器也不例外。CSR(证书签名请求)是一份包含你的域名与组织关键信息的文件,由 CA(证书颁发机构)验证后颁发你所申请的 SSL 证书。

生成并使用 CSR 的步骤

生成 CSR:使用服务器工具生成 CSR 与私钥,妥善保存私钥,因为后续安装时会用到。

访问 CSR 文件:CSR 生成后,用记事本等文本编辑器打开 .csr 文件,复制其中包含 -----BEGIN NEW CERTIFICATE REQUEST----- 与 -----END NEW CERTIFICATE REQUEST----- 标记的完整文本。

下单购买 SSL 证书:根据所选证书类型,颁发时间从几分钟到 5 个工作日不等。颁发后即可继续在 Heroku 上安装 SSL。

如何在 Heroku 服务器上安装 SSL 证书

开始安装前,请准备好以下文件:主证书(.crt 扩展名)、CA Bundle 文件(含中间证书与根证书)、与同一 CSR 一起生成的私钥文件。这些文件通常在 CA 验证通过后通过邮件发送。开始之前,还需确保 Heroku 服务器上已配置好 SSL endpoint。

第 1 步:合并证书

在 SSL 安装流程开始前,先把 CA Bundle 与主证书合并到一个文件中。你可以手动用记事本操作,也可以通过命令行自动完成。

方法 1:手动方式

用记事本同时打开主证书文件(.crt)与 CA Bundle 文件(.ca-bundle),复制 CA Bundle 内容粘贴到主证书内容下方,保存合并文件时不要留空格。

方法 2:命令行方式

若偏好自动化,可在命令行运行以下代码合并文件:

cat yourcertificate.crt bundle.ca-bundle > server.crt

这样会生成名为 server.crt 的单一文件,同时包含主证书与 CA Bundle。

第 2 步:SSL 证书安装

Heroku 提供两种安装 SSL 证书的方式:Dashboard(控制台)与 CLI(命令行)。我们先看更易懂的 Dashboard 方式。

方法 1:使用 Heroku Dashboard 安装

打开 Heroku 账户进入 Dashboard,选择应用并点击 Settings;向下滚动到 Domains and Certificates,点击 Configure SSL;在 Configure SSL 列表中选择 Manual 选项并点击其单选按钮,再点击 Continue;将证书与 CA Bundle 拖拽到指定框中,再将私钥文件拖入框内;为自定义域名与子域名更新 DNS 记录(需确定 host 与 target 值:Host 指你的域名或子域名,Target 通常为 your-domain-or-subdomain.herokudns.com)。配置 DNS 后点击"I've done this"再点 Continue。注意 DNS 变更全球生效通常需要几分钟到 48 小时。

方法 2:使用 CLI 安装

上传合并后的证书与含私钥的 CA Bundle,执行命令:

heroku certs:add server.crt server.key

若默认没有 Heroku 应用,可用 --app 参数指定:

heroku certs:add server.crt server.key --app yourappname

验证证书是否正确安装,执行命令:

heroku certs:info

注意:有时用户上传证书时会遇到"Internal server error",多因 CLI 版本过旧。建议使用最新版本以排查或避免此类错误。

第 3 步:在 SSL Endpoint 上安装证书

要在 SSL Endpoint 上安装证书,需先创建它。在本地环境提示符运行:

$ heroku addons:create ssl:endpoint

将 .crt 文件上传到应用的 SSL 目录后,把 CA bundle 证书与主证书合并到单一文件:

$ cat your-domain.crt bundle.crt > server.crt

将私钥与证书导入 endpoint:

$ heroku certs:add server.crt private.key

若正确,会显示 SSL 证书详情(含所选 endpoint 主机名与到期日)。endpoint 创建过程可能耗时 30 分钟到 2 小时。

设置好 SSL endpoint 后,需将安全域名的请求重定向到 Heroku endpoint 主机名。若尚未添加域名,运行:

$ heroku domains:add www.your-domain.com

随后为重定向到 endpoint 主机名创建 CNAME 记录(将 name-of-domain-you-added 替换为实际信息):

记录类型 – CNAME;名称 – www;目标 – name-of-domain-you-added.herokussl.com。

对于通配符证书,创建类似记录:记录类型 – CNAME;名称 – *;目标 – name-of-domain-you-added.herokussl.com。

注意:根域名(@)的 CNAME 记录会覆盖该域名的其他记录,因此若配置子域名 CNAME,SSL 证书也需覆盖该子域名。对于裸域名(如 example.com),需支持"zone apex CNAME"功能的 DNS,才能在区域顶点创建 CNAME 记录重定向到 SSL endpoint。

关键要点

CNAME 记录位于根域名会覆盖该域名其他 DNS 记录;SSL 证书应同时覆盖主域名与其子域名;根域名 CNAME 记录需 zone apex CNAME 功能才能顺畅工作(尤其 Heroku 这类平台);根域名的 DNS 配置对正确重定向到 SSL endpoint 至关重要。

结语

以上就是如何在 Heroku 服务器上安装 SSL 证书的完整流程。安装完成后,可使用免费的 SSL 检测工具确认 Heroku 服务器上的 SSL 证书工作正常。

相关阅读:如何在 cPanel 安装 SSL 证书、如何在 Apache CentOS 安装 SSL 证书、如何在 Drupal 安装 SSL 证书、如何在 HostGator 安装 SSL 证书、如何在不同 Web 服务器之间迁移或复制 SSL 证书。