Skip Navigation
Show nav
Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
    • .NET
  • ドキュメント
  • 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)
      • dyno の管理
      • dyno の概念
      • dyno の動作
      • dyno の参照資料
      • dyno のトラブルシューティング
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • 開発者ツール
    • コマンドライン
    • Heroku の VS Code 拡張機能
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリーとインテグレーション
    • 継続的統合
  • 言語サポート
    • Node.js
      • Node.js アプリのトラブルシューティング
      • Heroku での Node.js の動作
      • Node.js の操作
    • Ruby
      • Rails のサポート
      • Bundler の使用
      • Ruby の操作
      • Heroku での Ruby の動作
      • Ruby アプリのトラブルシューティング
    • Python
      • Python の操作
      • Python でのバックグラウンドジョブ
      • Heroku での Python の動作
      • Django の使用
    • Java
      • Heroku での Java の動作
      • Java の操作
      • Maven の使用
      • Spring Boot の使用
      • Java アプリのトラブルシューティング
    • PHP
      • PHP の操作
      • Heroku での PHP の動作
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
    • .NET
      • Working with .NET
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres スターターガイド
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
      • Heroku Postgres への移行
    • Heroku Key-Value Store
    • Apache Kafka on Heroku
    • その他のデータストア
  • AI
    • Vector Database
    • Working with AI
    • Heroku Inference
      • AI Models
      • Inference Essentials
      • Heroku Inference Quick Start Guides
      • Inference API
    • Model Context Protocol
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
      • シングルサインオン (SSO)
    • Private Space
      • インフラストラクチャネットワーキング
    • コンプライアンス
  • Heroku Enterprise
    • Enterprise Accounts
    • Enterprise Team
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Salesforce とのインテグレーション
  • セキュリティ
  • アプリのセキュリティ
  • SSL エンドポイント

SSL エンドポイント

日本語 — Switch to English

最終更新日 2024年12月22日(日)

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 ファイルのタイプ

SSL エンドポイントアドオンは非推奨であるため、お客様によってプロビジョニングできなくなりました。既存の SSL エンドポイントは引き続き機能します。SSL エンドポイントは 2021 年 7 月 31 日より Heroku SSL に移行されます。SSL エンドポイントアドオンの最終的なシャットダウンの日付およびサポート終了は 2021 年 10 月 18 日です。SSL エンドポイントを使用中のお客様には詳細がメールで通知されます。すべての既存の Heroku アプリケーションおよび新しい Heroku アプリケーションでは、Automated Certificate Management (ACM)​ を含む Heroku SSL​ を使用します。

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

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

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

SSL エンドポイントはカスタムドメインについてのみ役立ちます。すべてのデフォルトの <appname>-<random-identifier>.herokuapp.com​ ドメインはすでに SSL に対応しているため https​ を使用して、たとえば https://example-app-1234567890ab.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 -aes256 -out server.pass.key 4096
...
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 内のアプリの場合、このステップをスキップします。

SSL エンドポイントは非推奨であるため、お客様によって追加できなくなりました。SSL エンドポイント機能が必要だと思われる場合は、Heroku Support​を参照してください。

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

$ 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

SSL エンドポイントアドオンを使用しているとき、DNS ターゲットは heroku certs​ を実行したときに Endpoint​ の下に表示されることに注意してください。 heroku domains​ の下に表示される DNS ターゲットは、Heroku SSL​ または Automated Certificate Management (ACM)​ で使用されるためのものです。

サブドメイン

サブドメイン (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

証明書の削除

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
  • Support Channels
  • Status

Language Reference

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

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing
  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Github
  • LinkedIn
  • © 2025 Salesforce, Inc. All rights reserved. Various trademarks held by their respective owners. Salesforce Tower, 415 Mission Street, 3rd Floor, San Francisco, CA 94105, United States
  • heroku.com
  • Legal
  • Terms of Service
  • Privacy Information
  • Responsible Disclosure
  • Trust
  • Contact
  • Cookie Preferences
  • Your Privacy Choices