19

我正在尝试使用 Heroku 为我的应用程序获得 SSL 认证,但是自动证书管理对于两个域名之一都失败了。

我在 2017 年 3 月之前创建了测功机,所以我必须按照此处heroku certs:auto:enable的说明运行。

然后,heroku domains返回:

Domain Name         DNS Record Type  DNS Target
───────────────     ───────────────  ─────────────────────────────
example.com         ALIAS or ANAME   example.com.herokudns.com
www.example.com     CNAME            www.example.com.herokudns.com

这似乎符合heroku 的预期

无论如何,heroku certs:auto返回:

Domain             Status
───────────────    ────────────
example.com        Failing
www.example.com    OK          

我承认我对有关域、DNS 等的设置非常不识字。因此,从我的角度来看,这可能是一个非常简单的错误。但是,我阅读了Heroku 故障排除文档以及 SO 中的类似问题,例如this onethis one,但仍然不知道出了什么问题。

www.example.com没关系但失败的事实让example.com我更加困惑。不幸的是,我收到了一封没有失败原因的通知电子邮件。

名不虚传

我想问题出在 Heroku 或我购买域名的地方。那就是 Namecheap.com。

在那里,在Domain标签上我有:

NAMESERVERS Namecheap BasicDNS

REDIRECT DOMAIN   Source URL     Destination
                  example.com    http://www.example.com

Advanced DNS选项卡上:

Type                  Host    Value                               TTL
-------------         -----   -------------------------------     -------
CNAME Record          www     example.com.herokudns.com           Automatic
TXT Record            @       google-site-verification...         Automatic
URL Redirect Record   @       http://www.example.com/ Unmasked

我究竟做错了什么?


更新

这个问题似乎是由于 Namecheap 造成的。我在 Heroku 上找到了以下票:

问题

用户无法通过设置正确的 DNS 记录或通过 HTTPS 访问其根域(也称为顶点域/裸域)指向 Heroku 应用程序。

解析度

Heroku 上的根域需要使用“类似 CNAME”的记录,通常称为 ALIAS 或 ANAME 记录。

不幸的是,GoDaddy、Namecheap、Bluehost 等许多流行的 DNS 主机不支持这些类型的记录。相反,他们倾向于提供以下内容:

  • 一个记录

  • URL 重定向/转发

这两种选择都有一些警告......

令人惊讶的是,我没有找到所有步骤都解释清楚的地方。到目前为止我所做的是:

  1. 使用支持此功能的 DNS 主机开设一个帐户。我拿了 DNSimple。在撰写本文时,价格从 5 欧元/月开始,但有一个免费试用月。
  2. 转移域的费用为 14 欧元/年,所以我只是将 Namecheap 的名称服务器指向 DNSimple,并将域添加到 DNSimple 以创建 DNS 记录。
  3. 然后是 DNSimple 上的配置。我按照文档中的步骤 1将 HTTP 重定向到 HTTPS;忽略第 2 步,因为 Heroku 的 ACM 已经完成了;对于第 3 步,将 Domain Apex 指向 Heroku的文章非常有帮助。我手动添加了一个ALIAS record,还添加了一条CNAME记录,如下所示:

    Type        Name                   Content
    ─────       ───────────────        ───────────────────────
    ALIAS       example.commyapp.com.herokudns.com
    CNAME       www.example.commyapp.com.herokudns.com
    

一开始没有任何工作,浏览器显示以下错误:

无法访问此站点

找不到 www.example.com 的服务器 IP 地址。

检查故障排除文档我发现唯一的可能性是Name server propagation delay,所以我等待。感觉时间很长,但实际上不到一个小时,网站就重新上线了。

但是,SSL 认证在 48 小时后仍然失败......

4

2 回答 2

9

供将来参考:在联系 Heroku 支持后,他们手动刷新了我的证书请求,并最终为我的应用程序颁发了证书...

于 2018-04-09T15:44:52.103 回答
3

在此处查看答案,尤其是 CloudFlare 解决方案,因为它是免费的

自动证书管理还为您提供来自 https 的免费 SSL 证书。您不需要购买证书。

但是,namecheap 不适用于 ACM,因为它们不允许您的“顶点”域使用“别名”记录,即您的域没有子域,因此https://example.com不是https://www.example.com

您的选择是切换到支持“别名”记录(例如 dnsimple)的 dns 注册商。除了域名注册费外,他们每月收取 5 美元。

或者使用 SSL 附带的免费 cloudflare 实例。

如果您已经购买了证书,则可以通过 SSL 插件将其上传到 Heroku。

我在某些应用程序上使用 DNSimple/Heroku ACM,在其他应用程序上使用 cloudflare。两者都同样出色,但 cloudflare 是免费的,并且还为您提供 CDN。

https://www.reddit.com/r/Heroku/comments/7wh5r4/setting_up_ssl_with_heroku_namecheap/

于 2018-09-13T13:07:31.127 回答