Heroku正在逐步淘汰SSL端点,并用一个新功能取而代之:Heroku SSL。Heroku SSL是一个免费功能,允许针对自定义域名管理SSL/TLS加密,并依赖于服务器名称指示(SNI)。请注意,Heroku SSL目前仅在Heroku付费计划中提供。
不过,SSL端点仍然可用于需要旧版客户端和浏览器兼容性的情况。如果您希望从SSL端点迁移到Heroku SSL,随时可以参考这篇Heroku指南。
前提条件
完成激活和验证步骤后,您的证书将被发放,您可以继续进行SSL安装。为了通过Heroku SSL安装SSL证书,应使用以下文件:
- 为您的域名发放的SSL证书文件,例如拥有.crt或.pem扩展名的文件。
- CA捆绑文件,这是一串证书,通常安装它是为了让浏览器确认该证书是由受信任的证书颁发机构发放的,通常它与证书本身一起提供,文件拥有.ca-bundle扩展名。证书发放后,可以从ZTABOX电子邮件下载证书及其捆绑。
- 相应的私钥文件,拥有.key扩展名。您的私钥在生成证书的CSR代码时一起生成。(这与CSR代码相似,看起来是由数行随机符号组成。)该代码以'----BEGIN RSA PRIVATE KEY-----'开头并以'-----END RSA PRIVATE KEY-----'结尾。
对于Heroku,将证书和CA捆绑合并为一个文件是必要的。您可以使用任何纯文本编辑器打开.crt和.ca-bundle文件,将.ca-bundle文件中的代码粘贴到.crt文件中的代码下面(确保代码之间没有空格)。
在相应的命令行中,您可以使用以下命令合并文件:
cat yourcertificate.crt bundle.ca-bundle > server.crt
您也可以使用这个工具创建合并文件:这里。只需将您的证书代码粘贴到框中 > 单击“解碼” > 然后在“捆绑(Nginx)”字段中下载文件。
通过Heroku仪表板安装
要在Heroku仪表板中安装证书,打开证书,从列表中选择所需的应用程序,然后选择“设置”标签。

然后,向下滚动页面,在“域名和证书”部分单击“配置SSL”。

在出现在您屏幕上的窗口中,从列表中选择“手动”,然后单击“继续”。在第一个屏幕中,简单地将合并的证书+捆绑文件拖放到框中,然后单击“继续”。之后,对私钥文件执行同样的操作。

也可以手动粘贴代码(使用框中的“直接粘贴文件内容”选项)。您可以使用任何文本编辑器(如Windows的Notepad或Mac的TextEdit)打开文件,复制内容并粘贴到框中。
完成后,Heroku会提醒您更新自定义域/子域的DNS记录。您将需要使用显示的值创建一个CNAME记录。“主机”值(“名称”等)是您的域/子域,“目标”值(“指向”等)是yourdomain/subdomain.herokudns.com。
基本上,您需要遵循这个模式:
yourdomain.com CNAME yourdomain.com.herokudns.com
或
www.yourdomain.com CNAME www.yourdomain.com.herokudns.com
确保DNS配置完成后,单击“我已完成这个”,然后单击“继续”。请注意,DNS全局更新可能需要一段时间。
就这样,您的域现在可以通过HTTPS访问。您可以使用这个工具来验证安装。
通过CLI安装
另一种安装证书的方法是通过命令行。
这个过程相当简短。使用heroku certs:add server.crt server.key命令将证书+捆绑(如前一节的“前提条件”所述)和私钥文件上传到Heroku。
如果没有默认的Heroku应用,您还需要使用--app标志指定该应用,因此命令将如下所示:heroku certs:add server.crt server.key --app yourappname。

要检查当前是否安装了正确的证书,您可以运行heroku certs:info命令。

请注意,在添加证书时,您可能会遇到“内部服务器错误”。原因可能是您正在使用过时版本的Heroku CLI。在这种情况下,您可以检查CLI安装,并使用heroku update命令将其更新到最新版本,或重新安装CLI本身。
移除证书
如果您需要移除证书,可以通过相同的菜单来完成。导航到“域名和证书” > 单击“配置SSL” > 选择“移除” > 单击“继续” > 输入您的应用名称,然后单击“移除SSL”。

要使用命令行移除证书,只需运行命令heroku certs:remove并输入应用名称以进行确认。

更新证书
当您需要用另一个证书替换已安装的证书时(例如证书被重新发行、您收到了全新的证书或者是时候更新),在Heroku仪表板的安装过程将与之前完全相同。
对于命令行,唯一的区别是:您需要使用heroku certs:update命令而不是heroku certs:add,因此看起来将是:heroku certs:update server.crt server.key。

此外,我们建议设置HTTPS复位向,以便网站只能通过安全的HTTPS连接访问。
然而,在Heroku的情况下,此设定将取决于您用于构建应用的编程语言、框架和工具,并没有通用的方式来设置HTTPS复位向以确保适用于所有应用。