You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku启用自动证书管理仍无法使用HTTPS且报SSL错误求助

解决Heroku SSL_ERROR_BAD_CERT_DOMAIN问题的方案

从你给出的heroku certs:auto输出能明显看出问题:自动生成的SSL证书只覆盖了www.xxxxxxxx.com,但你大概率是直接访问不带www的裸域(比如xxxxxxxxx.com),或者你的域名解析没把两个域名都正确绑定到Heroku,导致浏览器检测到证书域名和访问域名不匹配,才抛出SSL_ERROR_BAD_CERT_DOMAIN错误。下面是分步解决的方法:

1. 先确认访问域名与证书的匹配性

直接在浏览器输入https://www.xxxxxxxx.com试试,如果能正常访问HTTPS,那说明问题就是裸域没被证书覆盖,接下来按后续步骤配置即可。

2. 让Heroku同时为裸域和www子域生成证书

Heroku的自动SSL(ACM)支持同时覆盖两个域名,但需要先把两个域名都添加到你的应用:

  • 打开终端执行:
    heroku domains:add xxxxxx.com  # 替换成你的裸域
    heroku domains:add www.xxxxxx.com  # 如果还没添加过的话
    
  • 然后刷新证书:
    heroku certs:auto:refresh
    

等待5-10分钟,让Let's Encrypt重新颁发包含两个域名的证书,之后再执行heroku certs:auto,查看通用名称(Common Name(s))是否同时显示两个域名。

3. 修正GoDaddy的DNS解析配置

这一步是关键,GoDaddy的DNS设置容易踩坑:

  • www子域:添加/修改CNAME记录,记录值指向你的Heroku应用域名(格式类似yourappname.herokuapp.com)
  • 裸域:GoDaddy不支持裸域的CNAME记录,你有两个选择:
    • 若GoDaddy支持ALIAS记录(部分账户有这个选项),直接设置ALIAS指向你的Heroku应用域名
    • 否则添加A记录,值填Heroku的官方IP:50.16.241.37、50.16.241.38、50.16.241.39、50.16.241.40(可以通过dig yourappname.herokuapp.com获取最新IP)

    注意:用A记录的话,Heroku的IP可能会变动,所以更推荐用ALIAS或者直接把裸域301重定向到www子域

4. 验证DNS生效

修改DNS后,可能需要等待1-24小时生效(快的话几分钟),可以用终端执行nslookup xxxxxx.com或者dig xxxxxx.com,确认解析结果指向Heroku的IP或域名。

5. 完善Rails的HTTPS跳转配置

除了config.force_ssl = true,还可以在config/environments/production.rb里添加规则,强制所有请求跳转到正确的HTTPS域名:

# 示例:把裸域请求跳转到www子域
config.middleware.insert_before 0, Rack::Rewrite do
  r301 %r{.*}, 'https://www.xxxxxx.com$&', if: Proc.new { |rack_env|
    rack_env['SERVER_NAME'] == 'xxxxxx.com' && rack_env['HTTP_X_FORWARDED_PROTO'] == 'https'
  }
end

这样配置后,不管用户访问裸域还是www子域,都会被引导到有有效SSL证书的地址,就不会再出现证书域名不匹配的错误了。

内容的提问来源于stack exchange,提问作者Ulas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:27:30