一个Heroku应用如何使用多个SSL证书

42

在单个Heroku应用程序中是否可以拥有多个SSL证书?

我们有多个不同类型和TLD的域名指向我们的应用程序,需要保护每个域名。最好不要重定向到不同的安全URL。


请看此处答案:https://dev59.com/MmrXa4cB1Zd3GeqPB7Wa。在Heroku Cedar堆栈上应该完美运行。 - schmielson
不幸的是,这并没有解决我们的需求。我们有多个域名属于多个公司。SAN/UCC证书仅适用于同一实体/公司/个人拥有的域名。我们在后台创建了一个iFrame作为快速修复,但现在我们已将平台迁移到自己的基础架构上。 - Dallas Clark
5个回答

94

有一种方法可以将多个SSL端点路由到同一个应用程序。

SSL端点通过终止SSL连接并将未加密的流量注入到正常的Heroku路由层中来工作。

您可以通过创建一个新的应用程序和一个新的SSL端点来利用它,以终止SSL连接并将流量路由到现有的应用程序:

  1. 将您的域名添加到您的应用程序中:

    $ heroku domains:add ssl.example.com

  2. 创建一个新的应用程序:

    $ heroku create endpoint-for-example-com

  3. 添加SSL端点附加组件($20/月):

    $ heroku addons:create ssl:endpoint --app endpoint-for-example-com

  4. 将您的证书添加到新的应用程序:

     $ heroku certs:add server.crt bundle.pem server.key --app endpoint-for-example-com --type endpoint
     Resolving trust chain... done
     Adding SSL Endpoint to endpoint-for-example-com... done
     endpoint-for-example-com now served by kagawa-1482.herokussl.example.com
    
  5. 使用分配给您的新应用程序的ssl端点(例如kagawa-1482.herokussl.example.com)作为您希望保护的域名的CNAME主机。通常在您的域名的DNS配置中完成此操作。

新应用程序不需要任何dynos,但是将为SSL端点附加组件收取每月20美元的费用。

注:

  • Heroku没有记录这种解决方案,因此他们有可能会在未来删除或更改此行为。 Heroku已确认这对于生产使用是安全的。
  • 确保在与主应用程序相同的区域内创建您的端点。
  • 您的DNS更改可能需要一段时间才能生效。

1
嗨,Same,你能给我更多关于DNS设置的指导吗?如果我在SSL主机服务器上没有运行应用程序,我该如何让newdomain.com指向domain.com上的应用程序,同时在newdomain-ssl应用程序上获取SSL证书? - Brad Herman
5
不确定为什么这个没有绿色勾选。它的功能非常好,我猜 Heroku 会允许这样做一段时间,因为它从技术上讲并不会增加任何额外费用,因为终端实例处于休眠状态,DNS 直接将您导向正确的应用程序。 - dsmithco
6
我刚刚收到来自Heroku支持团队和路由团队的确认,他们表示这种方法可以安全地用于生产环境。 - Loktar
2
对于仅使用www.example.com和example.com的情况,最好使用通配符证书并将其指向相同的Heroku SSL端点。如果您要使用两个不同的域名(例如example.com和example2.com),那么是的,您将为每个单独的域名支付$20。 - Patm
2
它与付费的SSL端点附加组件一起正常工作。记录一下,它目前无法与免费的Heroku SSL(Beta)一起使用。 - TripleH
显示剩余8条评论

6
最近,Heroku已为付费dynos、hobby和更高版本添加了自动的LetsEncrypt TLS证书。这将自动适用于任意数量的域名和子域名。如果您不需要通配符子域名,则此方法仅适用。

heroku

此外,您可以使用certbot在多个域和子域中自己管理LE证书。 certbot certonly --standalone -d example.com -d www.example.com -d test.net 上传自定义证书可参考heroku doc

1
随着LetsEncrypt从2018年3月开始提供免费通配符证书,Heroku的路线图中是否包括对其的ACM支持? https://community.letsencrypt.org/t/acme-v2-and-wildcard-certificate-support-is-live/55579/ - kvirani

4
虽然不完全与OP的问题相同,但我能够在Heroku上使用一个SAN(主题备用名称)证书以每年约25美元的价格实现此目的。
我在OSX上通过以下方式生成了具有多个主题备用名称(subjectAltName)的CSR:
  1. Copying /System/Library/OpenSSL/openssl.cnf to the current directory, and amending the relevant sections ([req] and [v3_req]):

    [req]
    req_extensions = v3_req
    
    [v3_req]
    subjectAltName=DNS:www.example1.com,DNS:www.example2.com,DNS:www.example3.com
    
  2. Then I used this new .cnf when generating the CSR:

    openssl req -nodes -newkey rsa:2048 -keyout server.key -out server.csr -config openssl.cnf
    
  3. I purchased the cert from SSLs.com. Their Comodo "PositiveSSL Multi-Domain" is $25.99/yr as of this writing and support from 3-100 domains (domains over 3 cost something like $12).

  4. I concatenated the CA bundle and .crt that I was sent into a single .crt (in that order) and added it to Heroku. All 3 domains were added to the app and pointed to the same CNAME, and all resolve over https:// as expected.

如果这对任何有兴趣的人来说是可行的路线,那么比每年240美元的额外端点便宜得多。

相关链接:


-2

谢谢,我会告诉你我的进展。 - Dallas Clark
4
该链接已失效,该页面中不存在该部分。 - Ed Sykes

-4
我们拥有多个公司的多个域名。SAN/UCC证书仅适用于同一实体/公司/个人拥有的域名。我们在背景中创建了一个iFrame作为快速解决方案,但现在我们已经将平台迁移到了自己的基础设施上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接