Heroku での SSL の概要
最終更新日 2019年07月19日(金)
Table of Contents
Heroku アプリのカスタムドメインに対して SSL を有効にする方法には、次の 3 つがあります (推奨される使用の順番に並べられている)。
- Automated Certificate Management (ACM)
- Heroku SSL
- SSL エンドポイント (有料のアドオン)
一般に、Automated Certificate Management でサポートされていない機能を必要とする場合を除き、アプリは ACM を使用する必要があります。各方法によって提供される機能の概要については以下で説明します。
Private Spaces 内のアプリでの SSL の有効化については、ここにあるドキュメントを参照してください。
SSL は、Common Runtime アプリの .herokuapp.com
に対しては常に有効になっています。
どのような場合に Automated Certificate Management (ACM) を使用するか
Automated Certificate Management (ACM) では、Heroku は、Common Runtime 上の有料の dyno で実行されているアプリの TLS 証明書を自動的に管理します。ACM によって処理される証明書は、有効期限が切れる 1 か月前に自動的に更新されます。また、カスタムドメインを追加または削除するたびに、新しい証明書が自動的に作成されます。
ACM は、ほとんどの Heroku アプリに推奨されます。その理由は次のとおりです。
- 追加コストなしで TLS 証明書が提供されます。
- 複数のドメインの証明書の作成がサポートされています。
- 期限が切れる前に TLS 証明書が自動的に更新されます。
ACM では次のものがサポートされません。
- ワイルドカードドメイン
- EV 証明書
ACM でサポートされていない機能のいずれかが必要なアプリは、代わりに Heroku SSL を使用する必要があります。
ACM の DNS ターゲット
ACM の DNS ターゲットは、Common Runtime アプリの場合は herokudns.com
で、Private Spaces アプリの場合は herokuspace.com
で終わります。たとえば、次のようになります。
example.com example.com.herokudns.com
www.example.com www.example.com.herokudns.com
または
example.com randon-word-odhsycy1xdsqfbqy8gceaa2d.herokudns.com
Private Spaces の場合は、次のようになります。
example.com random-haiku-5196.also-random-3847.herokuspace.com
この場合も、ワイルドカードドメインは ACM でサポートされません。
どのような場合に Heroku SSL を使用するか
Heroku SSL は、独自の TLS 証明書をアップロードできる、有料の dyno で実行されるアプリのための無料のサービスです。この証明書を購入および更新する責任は、お客様側にあります。
次の場合は、Automated Certificate Management (ACM) の代わりに Heroku SSL を使用してください。
- EV 証明書を使用したい。
- アプリでワイルドカードドメインをサポートする必要がある。
- SSL エンドポイントの使用から ACM の使用に移行している最中である。
Heroku SSL では、TLS プロトコルの拡張機能である Server Name Indication (SNI) を使用します。アプリで SNI がサポートされていない古いブラウザをサポートする必要がある場合は、代わりに SSL エンドポイントアドオンを使用してください。
Heroku SSL の DNS ターゲット
Heroku SSL の DNS ターゲットは、次のパターンに従います。
example.com example.com.herokudns.com
www.example.com www.example.com.herokudns.com
*.example.com wildcard.example.com.herokudns.com
どのような場合に SSL エンドポイントを使用するか
SSL エンドポイントは、1 か月あたり 20 ドルのコストがかかるアドオンです。このオプションでは、独自の証明書を購入および更新する責任は、お客様側にあります。
次の場合は、SSL エンドポイントのみを使用する必要があります。
- アプリで TLS 1.0 または 1.1 を無効にする必要がある。
- アプリで SNI (Server Name Indication) がサポートされていない古いブラウザをサポートする必要がある。
アプリに上記の考慮事項のいずれも適用されない場合は、代わりに ACM または Heroku SSL のどちらかが推奨されます。
SSL エンドポイントの証明書をアップロードする場合は、heroku certs:add
コマンドを実行するときに --type endpoint
オプションを含める必要があります。
SSL エンドポイントの DNS ターゲット
SSL エンドポイントを使用する (Private Spaces ではなく) Common Runtime 内のアプリケーションは、次の DNS ターゲットパターンを使用します。
<random-string>.ssl.herokudns.com