かんたん SSL 化

UPnP を利用した SSL 化

UPnP が使える環境なら、SSL 化に必要なポート開放(80/443)も、サーバーアプリが自動で行います。ルーターの管理画面を開かずに、Let's Encrypt の証明書取得から HTTPS 公開までをアプリ内で完結できます。

これは一例です: ネットワーク構成(ルーターの機種・UPnP の対応状況・回線契約・プロバイダ・既存の設定など)は環境によって大きく異なります。本ページの手順は代表的な構成を想定した一例であり、すべての環境でそのまま当てはまるわけではありません。実際の設定値や画面はお使いの機器に合わせて読み替えてください。

なぜ SSL 化するのか

外出先など LAN の外からサーバーへアクセスする場合、通信を暗号化(HTTPS / TLS)しておくと、ログイン情報やメディアの中身が途中で盗み見られるのを防げます。LAN 内だけで使うなら HTTP のままでも動作しますが、インターネットに公開するなら HTTPS 化を強くおすすめします。

  • 通信を暗号化し、パスワードや視聴内容を保護します。
  • Let's Encrypt の公的な証明書なら、ブラウザやアプリの警告なしで接続できます。
  • 証明書はアプリが自動で更新するため、期限切れの心配がありません。

しくみ

Let's Encrypt は「そのドメインを本当に持っているか」を確認するため、外部から 80 番または 443 番ポートへアクセスしてきます。このポートをルーターでサーバーへ転送する必要がありますが、UPnP に対応したルーターなら、サーバーアプリがこの転送設定を自動で行います。

  • UPnP で自動ポート開放IGD 対応ルーターに対し、外部 80/443 → サーバーの待受ポートへの転送をアプリが自動設定します(既定は無効。検出には LAN 内で UDP 1900 を使います)。
  • Let's Encrypt 自動取得・更新独自ドメインの証明書をアプリが自動取得し、約 12 時間ごとに点検して期限前に自動更新します。HTTP→HTTPS リダイレクトにも対応。
  • アプリ内で完結リバースプロキシも追加ソフトも不要。管理画面の操作だけで HTTPS 公開まで到達できます。

外部 80/443 は「サーバーがその番号で待ち受ける」という意味ではありません。サーバーは自身の HTTP/HTTPS 待受(既定 5000/5443)で応答し、ルーターが「外部 80 → 内部 5000」「外部 443 → 内部 5443」のように転送します。番号はお使いの設定に合わせて読み替えてください。

前提条件

この方法を使うには、おおむね次の条件がそろっている必要があります(環境により異なります)。

独自ドメイン取得済みの独自ドメイン。A レコードをサーバーのグローバル IP に向けます。固定 IP が無ければ DDNS の併用を推奨。
UPnP 対応ルーターUPnP(IGD)が有効なルーター。設定で UPnP がオフの場合は有効化が必要です。
外部からの到達インターネット側から 80 番または 443 番に到達できること。プロバイダによってはこれらのポートが塞がれている場合があります。
ファイアウォールサーバー機のローカルファイアウォールで使用ポートの受信を許可。UPnP 利用時は UDP 1900 を遮断しないこと。

回線が CGNAT(複数の利用者で 1 つのグローバル IP を共有する方式)の場合や、二重ルーター構成では、UPnP による自動開放だけでは外部から到達できないことがあります。ご契約の回線・機器の構成をご確認ください。

手順(一例)

代表的な構成での流れの一例です。画面名や項目はお使いのバージョン・機器に合わせて読み替えてください。

  1. ドメインの A レコードを、サーバーのグローバル IP(または DDNS のホスト名)に向けて設定します。
  2. ルーターの設定で UPnP が有効になっていることを確認します。
  3. 管理画面の「システム > ネットワーク/TLS」を開きます。
  4. UPnP 自動ポート開放をオンにします。アプリが外部 80/443 をサーバーへ転送します。
  5. 証明書モードで「Let's Encrypt 自動取得(ACME)」を選び、ドメイン名を入力します。チャレンジ方式は HTTP-01/TLS-ALPN-01/auto から選べます。
  6. 取得を実行すると証明書が発行され、HTTPS が有効になります。必要に応じて HTTP→HTTPS リダイレクトもオンにします。
  7. アプリから https://<あなたのドメイン> でログインできることを確認します。

証明書モードには、自己署名の生成・CA 署名証明書のアップロードもあります。Let's Encrypt は独自ドメインと外部到達が必要です。DNS-01 やワイルドカード証明書には対応していません。

うまくいかないとき

SSL 化が失敗するときは、次のような原因が考えられます(環境により異なります)。

  • ルーターで UPnP が無効、または UPnP 非対応の機種
    UPnP を有効化するか、手動のポート転送を使います。
  • プロバイダが 80/443 を塞いでいる
    外部から到達できる別の構成を検討します。
  • CGNAT や二重ルーターで外部から届かない
    回線・機器構成の見直しが必要です。
  • ドメインの A レコードが正しい IP を向いていない、または DNS の反映待ち
    設定内容と反映状況を確認します。
  • ファイアウォールがポートや UDP 1900 を遮断している
    該当ポートの受信を許可します。

UPnP が使えない場合

UPnP が使えない・使いたくない環境でも、手動でポートを転送すれば同じように SSL 化できます。やることは UPnP が自動で行う処理と同じです。

  • 外部 80/443 を手動でポート転送する
    ルーターの管理画面で、外部 80 → サーバーの HTTP 待受(既定 5000)、外部 443 → HTTPS 待受(既定 5443)への転送を追加します。
  • 管理画面で Let's Encrypt を取得する
    ポート転送を追加したら、管理画面で Let's Encrypt 自動取得(ACME)を実行します。手順は UPnP の場合と同じです。
  • ポートの競合に注意する
    すでに別の用途で 80/443 を使っている場合は、競合しないよう確認してください。

ポート転送の追加方法はルーターの機種ごとに異なります。お使いの機器のマニュアルをご確認ください。ポート番号(5000/5443)は設定で変更している場合は読み替えてください。