单个 Heroku 应用程序中是否可以有多个 SSL 证书?
我们有多个不同类型的域名和指向我们应用程序的 TLD,需要保护每个域名。最好不要重定向到不同的安全 URL。
有一种方法可以让多个 SSL 端点将流量路由到同一个应用程序。
SSL 端点通过终止 SSL 连接并将未加密的流量注入正常的 Heroku 路由层来工作。
您可以通过创建具有新 SSL 端点的新应用程序来终止 SSL 连接并将流量路由到现有应用程序来利用这一点:
将您的域名添加到您的应用程序:
$ heroku domains:add ssl.example.com
创建一个新应用程序:
$ heroku create endpoint-for-example-com
添加 SSL 端点插件(20 美元/月):
$ heroku addons:create ssl:endpoint --app endpoint-for-example-com
将您的证书添加到您的新应用程序中:
$ 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
使用分配给您的新应用程序的 ssl 端点(例如kagawa-1482.herokussl.example.com
)作为您希望保护的域名的 CNAME 主机。这通常在您的域的 DNS 配置中完成。
新应用程序不需要任何测功机,但 SSL 端点附加组件将收取 20 美元/月的费用。
笔记:
最近,heroku 为付费 dynos、爱好和更高版本添加了自动 LetsEncrypt TLS 证书。这将自动适用于任意数量的域和子域。此方法仅在您不需要通配符子域时才有效。
此外,您可以使用certbot在多个域和子域中自行管理 LE 认证
certbot certonly --standalone -d example.com -d www.example.com -d test.net
您可以参考这个heroku 文档来上传自定义证书。
虽然与 OP 的问题不完全相同,但我能够在 Heroku 上通过一个 SAN(主题备用名称)证书以大约 25 美元/年的价格实现这一目标。
subjectAltName
我通过以下方式在 OSX 中生成了具有多个主题替代名称 ( ) 的 CSR :
复制/System/Library/OpenSSL/openssl.cnf
到当前目录,并修改相关部分([req]
和[v3_req]
):
[req]
req_extensions = v3_req
[v3_req]
subjectAltName=DNS:www.example1.com,DNS:www.example2.com,DNS:www.example3.com
然后我在生成 CSR 时使用了这个新的 .cnf:
openssl req -nodes -newkey rsa:2048 -keyout server.key -out server.csr -config openssl.cnf
我从 SSLs.com 购买了证书。截至撰写本文时,他们的 Comodo“PositiveSSL Multi-Domain”每年 25.99 美元,支持 3-100 个域(超过 3 个域的成本约为 12 美元)。
我将发送给我的 CA 包和 .crt 连接成一个 .crt(按此顺序)并将其添加到 Heroku。所有 3 个域都已添加到应用程序并指向相同的 CNAME,并且都按预期通过 https:// 解析。
如果对任何感兴趣的人来说这是一条可行的路线,那么额外的端点比每年 240 美元便宜得多。
相关链接:
我自己正在处理这个问题。Heroku 建议获取 SAN/UCC 证书,它可以让您列出多个域。刚刚使用 GoDaddy 完成了它,到目前为止它运行良好。
https://devcenter.heroku.com/articles/ssl-endpoint#serving-multiple-domains
我们有多个域名属于多家公司。SAN/UCC 证书仅适用于同一实体/公司/个人拥有的域名。我们在后台创建了一个 iFrame 作为快速修复,但我们已经将我们的平台转移到了我们自己的基础设施中。