我正在尝试使用Heroku获取我的应用程序的SSL认证,但Automated Certificate Management未能同时使用其中一个域名。
我在2017年3月之前创建了dyno,所以我必须按照heroku certs:auto:enable
的说明运行here。
然后,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
这似乎与what heroku expects一致。
无论如何,heroku certs:auto
回归:
Domain Status
─────────────── ────────────
example.com Failing
www.example.com OK
我承认我对域,DNS等设置非常不识字。因此,这可能是我身边的一个非常简单的错误。然而,我读了Heroku troubleshooting documentation以及类似的问题,如this one或this one,仍然不知道有什么不对。
事实上,www.example.com
还行,但example.com
失败只是让我更加困惑。不幸的是,我收到了一封没有failure reason的通知电子邮件。
我想问题是在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上找到了following ticket:
问题
用户无法将其根域(也称为顶点域/裸域)指向其Heroku应用程序,无论是设置正确的DNS记录还是通过HTTPS访问它。
解析度
Heroku上的根域需要使用“CNAME-like”记录,通常称为ALIAS或ANAME记录。
不幸的是,GoDaddy,Namecheap,Bluehost等许多流行的DNS主机都不支持这些类型的记录。相反,他们倾向于提供以下内容:
- 一个记录
- URL重定向/转发
有这两个选项的警告......
令人惊讶的是,我没有找到任何清楚解释所有步骤的地方。到目前为止我所做的是:
ALIAS record
,我还添加了一个CNAME
记录,如下所示:
Type Name Content
───── ─────────────── ───────────────────────
ALIAS example.commyapp.com.herokudns.com
CNAME www.example.commyapp.com.herokudns.com
开始时没有任何工作,浏览器显示以下错误:
无法访问此网站
无法找到www.example.com的服务器IP地址。
检查troubleshotting documentation我看到唯一的可能性是Name server propagation delay
,所以我等了。这感觉好像很长一段时间,但实际上只需不到一个小时,直到该网站再次上线。
但是,SSL认证在48小时后仍然失败......
供将来参考:联系Heroku支持后,他们手动刷新我的证书请求,最后发给我的应用程序...
请在此处查看答案,尤其是CloudFlare解决方案,因为它是免费的
自动化证书管理还为您提供来自https的免费SSL证书。您无需购买证书。
但是,namecheap不适用于ACM,因为它们不允许“apex”域的“别名”记录。你的域名没有子域名所以https://example.com不是https://www.example.com
您的选项将切换到支持“别名”记录的dns注册器,例如dnsimple。除域名注册费外,他们每月收费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/