Skip Navigation
Show nav
Heroku Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
  • ドキュメント
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
View categories

Categories

  • Heroku のアーキテクチャ
    • Dyno (アプリコンテナ)
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • コマンドライン
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリー
    • 継続的統合
  • 言語サポート
    • Node.js
    • Ruby
      • Bundler の使用
      • Rails のサポート
    • Python
      • Django の使用
      • Python でのバックグランドジョブ
    • Java
      • Maven の使用
      • Java でのデータベース操作
      • Play Framework の使用
      • Java の高度なトピック
      • Spring Boot の使用
    • PHP
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres Getting Started
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
    • Heroku Redis
    • Apache Kafka on Heroku
    • その他のデータストア
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
    • コンプライアンス
  • Heroku Enterprise
    • Private Space
      • インフラストラクチャネットワーキング
    • Enterprise Accounts
    • Enterprise Team
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
    • シングルサインオン (SSO)
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Integrating with Salesforce
  • セキュリティ
  • アプリのセキュリティ
  • SSL エンドポイント

SSL エンドポイント

日本語 — Switch to English

この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。

最終更新日 2019年08月14日(水)

This article is a work in progress, or documents a feature that is not yet released to all users. This article is unlisted. Only those with the link can access it.

Table of Contents

  • 概要
  • SSL 証明書の取得
  • Heroku での SSL の設定
  • アドオンの作成
  • 証明書および中間証明書の追加
  • エンドポイントの詳細
  • DNS およびドメインの設定
  • SSL のテスト
  • 証明書の更新
  • 証明書の削除
  • クライアント IP アドレス
  • パフォーマンス
  • トラブルシューティング
  • SSL ファイルのタイプ

新しい Heroku アプリケーションでは、​Automated Certificate Management (ACM)​ を含む ​Heroku SSL​ を使用する必要があります。この記事に記載されている SSL エンドポイントアドオンは、従来の Heroku アプリケーションのサポートまたはカスタムセキュリティポリシーが必要なアプリケーションについてのみ推奨されます。

SSL は、すべての Web リクエストにエンドツーエンド暗号と整合性をもたらす暗号化プロトコルです。機密性の高いデータを転送するアプリでは、すべての情報を安全に転送できるように SSL を有効にする必要があります。

SSL を ​www.example.com​ などのカスタムドメインで有効化するには、SSL エンドポイントアドオンを使用します。

​SSL エンドポイント​は有料のアドオンサービスです。サービスをプロビジョニングするときは、このことに注意してください。

SSL エンドポイントはカスタムドメインについてのみ役立ちます。すべてのデフォルトの ​appname.herokuapp.com​ ドメインはすでに SSL に対応しているため ​https​ を使用して、たとえば ​https://appname.herokuapp.com​ のようにしてアクセスできます。

​

概要

​

SSL 検証に特有の性質により、アプリケーションに対する SSL のプロビジョニングは、いくつかのサードパーティを含む複数ステップのプロセスとなります。次のことを行う必要があります。

  1. SSL 証明書を SSL プロバイダーから購入する
  2. Heroku からSSL エンドポイントをプロビジョニングする
  3. 証明書を Heroku にアップロードする
  4. 新しい SSL エンドポイント URL を参照するように DNS 設定を更新する

​

SSL 証明書の取得

​

ステージングアプリおよびその他の非本番アプリでは、無料の 自己証明 SSL 証明書 を使用でき、SSL 証明書を購入する必要はありません。

SSL 証明書の購入は、ベンダーによって費用やプロセスが異なります。​DNSimple​ と ​ExpeditedSSL​ は、証明書購入の簡略な方法を提供し、推奨のソリューションになります。

そうではなく、他の SSL プロバイダーを使用するには、次のステップの一部または全部を行う必要があります。

​

プライベートキーの生成

​

SSL 証明書を要求する前に、​openssl​ ツールを使用してローカル環境でプライベートキーを生成する必要があります。ターミナルから ​openssl​ コマンドを実行できない場合、インストールする必要がある可能性があります。

​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​
​所有している OS​​インストールに使用するコード​
​Mac OS X​​​​Homebrew​​: ​​brew install openssl​​​
​Windows​​​​Windows 用完全パッケージ .exe インストーラー​​​
​Ubuntu Linux​​​​apt-get install openssl​​​

​openssl​ を使用して新しいプライベートキーを生成します。

求められた場合、簡単なパスワード値を入力します。これは CSR の生成時にのみ使用され、ランタイム時にアプリで使用されません。

 

Heroku は証明書に RSA キーのみをサポートします。楕円曲線 (ECC) キーはサポートしていません。

$ openssl genrsa -des3 -out server.pass.key 2048
...
Enter pass phrase for server.pass.key:
Verifying - Enter pass phrase for server.pass.key:

プライベートキーからパスワードを取り除く必要があるので、パスワードを手動で入力せずにプライベートキーを読み込むことができます。

$ openssl rsa -in server.pass.key -out server.key

これで、現在の作業用ディレクトリに ​server.key​ プライベートキーファイルが用意されます。

​

CSR の生成

​

CSR は、証明書署名要求のことであり、SSL 証明書の購入時にも必要になります。前のステップのプライベートキーを使用して CSR を生成します。これには、組織およびドメインに関する識別情報を入力する必要があります。

ほとんどのフィールドは一目瞭然ですが、次の点には特に注意してください。

​​ ​​ ​​ ​​ ​​ ​
​フィールド​​説明​
​国名​​組織の本拠がある国の ​​ISO 3166-1 形式​​の 2 文字コード。​
​共通名​​これは、保護する必要のある​​完全修飾ドメイン名​​です。
    ​
  • ​単一のサブドメインの場合: ​​www.example.com​​​
  • ​ ​
  • ​すべてのサブドメインの場合 (ワイルドカード URL を指定): ​​*.example.com​​​
  • ​ ​
  • ​ルートドメインの場合: ​​example.com​​​
  • ​

​Common Name​ フィールドは、安全なドメインに一致する必要があります。ルートドメイン (たとえば、​example.com​) の証明書は購入できず、​www.example.com​ を保護することは期待できません。その逆もあります。 さらに、SSL エンドポイントは、アプリあたり 1 つの証明書しかサポートしません。マルチドメインアプリケーションにはこのことに留意し、必要なドメインすべてに一致する ​Common Domain​ を指定してください。

CSR を生成します。

$ openssl req -nodes -new -key server.key -out server.csr
...
Country Name (2 letter code) [AU]:US
Common Name (eg, YOUR name) []:www.example.com
...

この操作の結果は、(前のステップからの ​server.key​ プライベートキーファイルと並んで) ローカルディレクトリ内に ​server.csr​ ファイルが生成されます。

​

SSL プロバイダーへの CSR の送信

​

次に、新しい SSL 証明書を作成するプロセスを、選択した証明書プロバイダーで開始します。これは、プロバイダーに応じて異なりますが、前のステップで生成された CSR をある時点でアップロードする必要があります。

どの Web サーバーで証明書を作成するかについても尋ねられることがあります。その場合は、Heroku で使用する Web サーバーとして Nginx を選択します。Nginx がオプションでない場合、Apache 2.x も対応します。

PKCS や X.509 など、使用する証明書形式のオプションが与えられている場合は、X.509 を選択します。

複数のサブドメインを保護する場合は、プロバイダーからワイルドカード証明書を購入する必要があります。これらの証明書は通常さらにコストがかかりますが、​*.example.com​ のすべてのサブドメインのリクエストに SSL で対応できるようになります。

SSL 証明書の購入プロセスが完了すると、次のような複数のファイルが用意されています。

  • 証明書プロバイダーからダウンロードされた、CSR に指定されているドメインの SSL 証明書。このファイルには ​.pem​ または ​.crt​ の拡張子が付けられます。
  • 最初のステップで生成したプライベートキー (​server.key​)。

​

Heroku での SSL の設定

​

SSL 証明書ファイルおよびプライベートキーを入手したら、アプリの SSL エンドポイントをすぐに設定できます。Heroku での SSL 設定は、アプリケーションをデプロイする場所にわずかに依存します。

​

アドオンの作成

​

このステップは、​Common Runtime​ 内のアプリについてのみ必要です。Private Space 内のアプリの場合、このステップをスキップします。

次のコマンドでアドオンを作成します。

$ heroku addons:create ssl:endpoint
Adding ssl:endpoint on example... done, v1 ($20/mo)

​

証明書および中間証明書の追加

​

​certs:add​ コマンドで、証明書、すべての中間証明書、およびプライベートキーをエンドポイントに追加します。以下に示すように、このコマンドに ​--type endpoint​ 引数を含めることが必要になります。

Heroku は ​certs:add​ コマンドの一部として、証明書チェーンの不要な部分を自動的に取り除きます。一部のシナリオでは、このことが望ましくない場合もあります。

$ heroku certs:add server.crt server.key --type endpoint
Adding SSL Endpoint to example... done
example now served by example-12345.ssl.herokudns.com.
Certificate details:
Expires At: 2012-10-31 21:53:18 GMT
Issuer: C=US; ST=CA; L=SF; O=Heroku; CN=www.example.com
Starts At: 2011-11-01 21:53:18 GMT
...

アプリに割り当てられたエンドポイント URL は出力に一覧表示され、この例では ​example-12345.ssl.herokudns.com​ になります。この URL にアクセスすると、"no such app" というメッセージが表示されますが、これは予想された結果です。適切な検証ステップについて、詳細をお読みください。

Private Spaces 内のアプリの名前は、​some-name.some-other-name.herokuspace.com​ という形式になります。あらゆる状況で、​certs:add​ コマンドの出力は、このことを正確に反映します。

​

エンドポイントの詳細

​

SSL 設定の詳細は ​heroku certs​ で確認できます。

$ heroku certs

Name         Endpoint                      Common Name(s)     Expires               Trusted  Type
───────────  ─────────────────────────    ──────────────────  ────────────────────  ───────  ────────
example-2121  example-12345.ssl.herokudns.com  www.example.com     2018-06-30 23:59 UTC   False   Endpoint

証明書に関する詳細な情報を取得するには、​certs:info​ を使用します。

$ heroku certs:info
Fetching SSL Endpoint example-12345.ssl.herokudns.com info for example... done
Certificate details:
Expires At: 2012-10-31 21:53:18 GMT
Issuer: C=US; ST=CA; L=SF; O=Heroku; CN=www.example.com
Starts At: 2011-11-01 21:53:18 GMT
Subject: C=US; ST=CA; L=SF; O=Heroku; CN=www.example.com
...

非常に稀なケースで、SSL エンドポイントがプロビジョニングされるまでに長い時間がかかることがあります (30 分から 2 時間)。エンドポイント URL に到達できない場合、先に進む前に、この時間だけ待機してください。

​

DNS およびドメインの設定

​

SSL エンドポイントをプロビジョニングして証明書が確認されたら、エンドポイント URL を使用して安全なドメインのリクエストをルーティングする必要があります。まだ行っていない場合、次のコマンドを使用して、CSR を生成するときに指定されたドメインをアプリに追加します。

$ heroku domains:add www.example.com
Added www.example.com to example... done

​

サブドメイン

​

サブドメイン (​www.example.com​ など) を保護する場合、DNS 設定を変更してエンドポイントの CNAME レコードを作成するか、CNAME レコードがすでにある場合は CNAME ターゲットを変更します。

​​ ​​ ​​ ​​ ​​ ​​
​レコード​​名前​​ターゲット​
​​​CNAME​​​​​​www​​​​​​example-12345.ssl.herokudns.com.​​​

ワイルドカード証明書を使用している場合、DNS 設定は同様になります。

​​ ​​ ​​ ​​ ​​ ​​
​レコード​​名前​​ターゲット​
​​​CNAME​​​​​​*​​​​​​example-12345.ssl.herokudns.com.​​​

​

ルートドメイン

​

ルートドメイン (​example.com​ など)を保護している場合、​CNAME のような機能をゾーン Apex で提供している DNS プロバイダー​を使用している必要があります。

DNS 設定を変更し、ALIAS または ANAME レコードをエンドポイントに対して作成します。

​​ ​​ ​​ ​​ ​​ ​​
​レコード​​名前​​ターゲット​
​​​ALIAS​​ または ​​ANAME​​​​<empty> または ​​@​​​​​​example-12345.ssl.herokudns.com.​​​

​

SSL のテスト

​

​curl​ などのコマンドラインユーティリティを使用して、すべてが安全なドメインに合わせて正しく設定されているかをテストします。

​-k​ オプションは、信頼できない証明書を無視するように crul に指示します。

$ curl -kvI https://www.example.com
* About to connect() to www.example.com port 443 (#0)
*   Trying 50.16.234.21... connected
* Connected to www.example.com (50.16.234.21) port 443 (#0)
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using AES256-SHA
* Server certificate:
*    subject: C=US; ST=CA; L=SF; O=SFDC; OU=Heroku; CN=www.example.com
*    start date: 2011-11-01 17:18:11 GMT
*    expire date: 2012-10-31 17:18:11 GMT
*    common name: www.example.com (matched)
*    issuer: C=US; ST=CA; L=SF; O=SFDC; OU=Heroku; CN=www.heroku.com
*    SSL certificate verify ok.
> GET / HTTP/1.1
> User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8r zlib/1.2.3
> Host: www.example.com
> Accept: */*
...

出力に注意してください。​SSL certificate verify ok​ が出力されます。​common name: www.example.com (does not match 'www.somedomain.com')​ などが出力された場合は、正しく設定されていないものがあります。

​

証明書の更新

​

Heroku は ​certs:update​ コマンドの一部として、証明書チェーンの不要な部分を自動的に取り除きます。一部のシナリオでは、このことが望ましくない場合もあります。このチェーンの自動操作を回避するには、​--bypass​ フラグを含めます。

​certs:update​ コマンドを使用して新しい証明書と新しいまたは既存のプライベートキーに証明書を更新できます。

$ heroku certs:update server.crt server.key --endpoint example-12345.ssl.herokudns.com
Updating SSL Endpoint endpoint example-12345.ssl.herokudns.com for example... done

​

元に戻す

​

何らかの理由で新しい証明書が適切に機能しておらず、アプリ向けのトラフィックが中断されている場合、以前の証明書にロールバックできます。

$ heroku certs:rollback --endpoint example-12345.ssl.herokudns.com
Rolling back SSL Endpoint endpoint example-12345.ssl.herokudns.com on example... done

以前の証明書がない場合、このコマンドは失敗します。

Heroku は期限が切れた無効な証明書を 1 か月後にクリーンアップし、削除します。期限が切れた証明書にロールバックしようとしても、うまくいきません。

 

証明書を削除した後はロールバックできません。

​

証明書の削除

​

​certs:remove​ コマンドを使用して証明書を削除できます。

$ heroku certs:remove --endpoint example-12345.ssl.herokudns.com
Removing SSL Endpoint endpoint example-12345.ssl.herokudns.com on example... done

証明書を削除すると SSL エンドポイントが削除されるため、その SSL エンドポイントを指定しているすべてのドメイン名は動作を停止します。

証明書を削除した後はロールバックできません。証明書を削除すると、SSL エンドポイントも削除されてロールバックは動作しません。

 

証明書を削除しても請求は停止されません。請求を停止するには、SSL エンドポイントアドオンを削除する必要があります。​heroku addons:destroy ssl:endpoint​ でアドオンを削除します。

証明書を削除する前に SSL エンドポイントアドオンを削除しようとすると、エラーを受け取ります。

​

クライアント IP アドレス

​

エンドクライアント (多くの場合はブラウザ) が SSL リクエストを開始すると、リクエストは、アプリに送信される前に暗号化する必要があります。この余分な SSL ターミネーションステップにより、リクエストの元の IP アドレスが不明瞭になります。回避策として、外部クライアントの IP アドレスが ​​X-Forwarded-For​ HTTP リクエストヘッダー​に追加されます。

​

パフォーマンス

​

SSL エンドポイントインフラストラクチャは弾力性があり、過去のトラフィックレベルに基づいて自動的にサイズ変更します。ただし、新しく作成された SSL エンドポイントに大量のトラフィックを切り替えたり、トラフィックの急増が予想されたりする場合、​Heroku サポートにご連絡ください​。予防的なサイズ設定をお手伝いします。

サポートに連絡してエンドポイントを事前にウォームアップすることを検討する場合のしきい値は、初期のリクエスト率が 1 秒あたり 150 個を超えるか、既存の 1 秒あたりのリクエスト数が 5 分以内に倍増することです。これらの種類のリクエストを行う場合は、少なくとも 2 営業日前に Heroku に通知してください。

​

トラブルシューティング

​

​

信頼できない証明書

​

場合によっては、​heroku certs​ を実行したとき、証明書が信頼されないものとして表示されることがあります。

$ heroku certs
Endpoint                    Common Name         Expires                    Trusted
------------------------    ----------------    -----------------------    -------
example-12345.ssl.herokudns.com    www.example.com    2012-10-31 21:53:18 GMT    False

このことが発生した場合、この証明書が Mozilla の​ルート CA​ のリストによって信頼されていないことが原因である可能性もあります。このような場合、証明書は多くのブラウザでは想定どおり機能します。

ルート認証局によって署名された証明書をアップロードしたが、信頼されていないというメッセージを受け取った場合、証明書に何らかの問題があります。たとえば、​中間証明書​が欠落している場合もあります。そのような場合、SSL プロバイダーから中間証明書をダウンロードして、​certs:add​ コマンドを再実行してください。

​

内部サーバーエラー

​

証明書を追加するときに ​Internal server error​ が表示された場合は、古いバージョンの ​Heroku CLI​ がある可能性があります。

$ heroku certs:add server.crt server.key --type endpoint
Adding SSL endpoint to example... failed
! Internal server error.
! Run 'heroku status' to check for known platform issues.

​CLI がインストールされていることを検証​し、​heroku update​ で最新バージョンに更新してください。

​

SSL ファイルのタイプ

​

多くの異なるファイルタイプが、SSL 証明書の作成時に生成され、消費されます。

  • ​.csr​ ファイルは証明書署名リクエストであり、これによって証明書プロバイダーとの証明書リクエストが開始され、組織に関する管理情報が含まれます。
  • ​.key​ ファイルは、サイトの SSL 対応リクエストに使用されるプライベートキーです。
  • ​.pem​ および ​.crt​ の拡張子は、多くの場合区別なく使用され、どちらも base64 ASCII エンコードファイルです。技術的な違いは、​.pem​ ファイルには証明書​と​キーの両方が含まれ、​.crt​ ファイルには証明書だけが含まれているという点です。実際は、この相違は多くの場合無視されます。

関連カテゴリー

  • アプリのセキュリティ
自己署名の SSL 証明書を作成する SSL/TLS 証明書の手動による取得

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Podcasts
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing

Subscribe to our monthly newsletter

Your email address:

  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Heroku Podcasts
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Facebook
  • Instagram
  • Github
  • LinkedIn
  • YouTube
Heroku is acompany

 © Salesforce.com

  • heroku.com
  • Terms of Service
  • Privacy
  • Cookies
  • Cookie Preferences