コンテンツにスキップ
ドキュメント

🪪 証明書設定ガイド

このガイドでは、アプリに表示される証明書ステータスの意味、各ステータスで必要な対応、お使いの環境に適した設定を説明します。

アプリは、サーバーごとに接続のセキュリティ状態を表示します。表示されるステータスは次のとおりです。

すべての証明書ステータス
ステータス セキュリティレベル 説明
HTTPS(検証済み) 最高 信頼できるCAが署名した有効な証明書
HTTPS(ピン留め) 証明書のフィンガープリントを検証済み
SSL証明書を確認しない すべての証明書検証が無効
HTTPS(未検証 許可) 信頼されていない証明書、または不完全な証明書チェーンを許可
HTTP なし 暗号化されていない接続
HTTPS(ピン不一致) エラー 保存したフィンガープリントと一致しない
HTTPS(未検証 ブロック) エラー 自己署名証明書を拒否

HTTPS(検証済み)ステータス

意味:

  • サーバーが、信頼できる認証局(CA)の署名した有効なSSL証明書を使用しています。
  • 最も安全で推奨される構成です。

表示される条件:

  • Let’s Encrypt、DigiCertなど、信頼できるCAの証明書をサーバーが使用している。
  • 「信頼されていない証明書を許可する」オフになっている。

必要な操作:

  • 操作は不要です。理想的な状態です。

推奨する環境:

  • 本番環境
  • インターネットからアクセスできるサーバー
  • Let’s Encryptを使用したリバースプロキシ環境

HTTPS(ピン留め)ステータス

意味:

  • アプリがサーバー証明書のフィンガープリントを保存(ピン留め)しています。
  • 接続するたびに、保存した値とフィンガープリントが一致するかを検証します。
  • 証明書の改ざんや中間者攻撃(MITM)への対策になります。

表示される条件:

  • 「信頼されていない証明書を許可する」オンになっている。
  • サーバーへ接続し、証明書のフィンガープリントをピン留めしている。

必要な操作:

  • フィンガープリントがサーバーの実際の証明書と一致することを確認してください(別経路での確認を推奨します)。
  • サーバー証明書を再生成した場合は、ピン留めした情報の更新が必要です。

推奨する環境:

  • 自己署名証明書をより安全に使用したい場合
  • 証明書のフィンガープリントを手動で確認できる場合

SSL証明書を確認しないステータス

意味:

  • SSL/TLS証明書の検証がすべて無効になっています。
  • アプリは検証せずにすべての証明書を受け入れます。

表示される条件:

  • 「SSL証明書を確認しない」オンになっている。

必要な操作:

  • 信頼できるローカルネットワーク内でのみ使用してください。
  • 可能であれば、適切な証明書の設定を検討してください。

利用が想定される環境:

  • 適切なTLS終端を行わずにDockerでPi-holeを実行している場合
  • 一時的なトラブルシューティング
  • 外部からアクセスできない、隔離されたローカルネットワーク

HTTPS(未検証 許可)ステータス

意味:

  • サーバー証明書がこの端末で信頼されていません。
  • アプリは信頼されていない証明書を受け入れるよう設定されています。
  • 証明書はまだピン留めされていません。
  • 主な原因は、自己署名証明書や不完全な証明書チェーンです(fullchain.pem ではなく cert.pem を使用している場合など)。

表示される条件:

  • サーバーが自己署名証明書または不完全な証明書チェーンを使用している。
  • 「信頼されていない証明書を許可する」がオンになっている。
  • 証明書がまだピン留めされていない。

必要な操作:

  • 安全性を高めるため、確認画面が表示されたら証明書のフィンガープリントをピン留めしてください。
  • または、CAが署名した証明書の利用を検討してください。

HTTPステータス

意味:

  • 接続は暗号化されていません。
  • データは平文で送信されます。

表示される条件:

  • サーバーURLが http:// を使用している。

必要な操作:

  • セキュリティを高めるため、Pi-holeサーバーでHTTPSを有効にすることを検討してください。
  • 外部から隔離されたローカルネットワークでのみ使用してください。

HTTPS(ピン不一致)ステータス

意味:

  • サーバー証明書のフィンガープリントが、ピン留めした値と一致しません。
  • セキュリティ保護のため、接続がブロックされています。

表示される条件:

  • サーバー証明書が更新または再生成された。
  • 中間者攻撃が発生している(まれですが可能性があります)。

必要な操作:

  1. サーバー証明書を最近変更したか確認します。
  2. 意図した変更の場合は、サーバー設定からピン留めしたフィンガープリントを更新します。
  3. 心当たりがない場合は、ピン留めを更新する前に原因を調査します。

HTTPS(未検証 ブロック)ステータス

意味:

  • サーバー証明書がこの端末で信頼されていません。
  • 「信頼されていない証明書を許可する」オフになっています。
  • 接続はブロックされています。

表示される条件:

  • 自己署名証明書または不完全な証明書チェーン(fullchain.pem ではなく cert.pem を使用している場合など)のサーバーへ接続しようとしている。
  • アプリの既定設定が適用されている。

必要な操作:

  • 回避策として、サーバー設定の**「信頼されていない証明書を許可する」**をオンにします。
  • または根本原因を解消します。CAが署名した証明書を使用するか、完全な証明書チェーン(fullchain.pem)を配信してください。

アプリの既定値は次のとおりです。

  • **信頼されていない証明書を許可する:**オン
  • **SSL証明書を確認しない:**オフ
自己署名証明書の設定 署名済み証明書の設定

アプリの更新前に**「信頼されていない証明書を許可する」を有効にしていた場合、後方互換性を保つため、更新後は「信頼されていない証明書を許可する」「SSL証明書を確認しない」**の両方が自動的に有効になります。

その結果、すべてのHTTPSサーバーに**「SSL証明書を確認しない」**ステータスが表示され、次の警告バナーが表示されます。

アプリ更新後の警告バナー
  1. 対象サーバーの詳細画面を開きます。
  2. 「SSL証明書を確認しない」オフにします。
  3. 設定を保存します。
  4. **「信頼されていない証明書を許可する」**の確認画面が表示されます。
  5. 証明書のフィンガープリントを確認し、**「確認」**をタップします。
自己署名証明書の設定自己署名証明書を許可する確認画面

確認後、サーバーには**「HTTPS(ピン留め)」ステータスが表示されます。これは「SSL証明書を確認しない」**より安全な接続です。

DockerでPi-holeを使用する場合の注意

Section titled “DockerでPi-holeを使用する場合の注意”

Pi-holeをDockerで実行している場合、「信頼されていない証明書を許可する」を有効にしていても、接続できないことがあります。

Docker環境での接続エラー

これは、Pi-holeのDockerコンテナに組み込まれたWebサーバー証明書を、アプリのTLS実装で正しく検証できないために発生します。

解決方法1:証明書の確認を無効にする(簡単)

Section titled “解決方法1:証明書の確認を無効にする(簡単)”
証明書エラーを無視する設定
  1. サーバー設定で**「SSL証明書を確認しない」**を有効にします。
  2. 保存して再接続します。

解決方法2:リバースプロキシを使用する(推奨)

Section titled “解決方法2:リバースプロキシを使用する(推奨)”

Pi-holeの前段にリバースプロキシ(nginx、Caddy、Traefikなど)を設定します。

  1. リバースプロキシでTLS終端を処理するよう設定します。
  2. Let’s Encryptの無料で有効な証明書、またはリバースプロキシ上の自己署名証明書を使用します。
  3. リバースプロキシのURLを使用してPi-holeへ接続します。

利点:

  • 「HTTPS(検証済み)」または「HTTPS(ピン留め)」を利用できる。
  • 証明書を適切に管理できる。
  • 全体的なセキュリティが向上する。

Caddyの設定例:

pihole.local {
reverse_proxy pihole:80
tls internal
}

用途 推奨設定 想定されるステータス
完全なチェーンを含む有効なCA証明書(Let’s Encrypt + fullchain.pem 信頼されていない証明書を許可する:オフ HTTPS(検証済み)
不完全なチェーンのLet’s Encrypt証明書(cert.pem サーバーで fullchain.pem を使用するよう修正する。回避策として信頼されていない証明書を許可する:オン HTTPS(検証済み) / HTTPS(ピン留め)
自己署名証明書 信頼されていない証明書を許可する:オンにし、証明書をピン留め HTTPS(ピン留め)
リバースプロキシを使用しないDocker環境 SSL証明書を確認しない:オン SSL証明書を確認しない
ローカル環境のHTTP接続 HTTP

有効なLet’s Encrypt証明書でSSLエラーが発生する場合(不完全なチェーン)

Section titled “有効なLet’s Encrypt証明書でSSLエラーが発生する場合(不完全なチェーン)”

有効なLet’s Encrypt証明書を使用しているにもかかわらず、アプリでSSLエラーが発生する場合、最も一般的な原因は不完全な証明書チェーンです。

Webブラウザーは不足している中間証明書を自動的に取得できますが、FlutterのHTTPクライアントでは、サーバーが完全な証明書チェーンを提供する必要があります。通常、サーバーで fullchain.pem ではなく cert.pem を設定している場合に発生します。

症状:

  • アプリから接続するとSSLエラーが発生する。
  • Webブラウザーからは問題なく接続できる。
  • ブラウザーで確認すると証明書は有効と表示される。

解決方法1:証明書チェーンを修正する(推奨)

Section titled “解決方法1:証明書チェーンを修正する(推奨)”

Pi-holeでは、証明書と秘密鍵の両方を含む単一のPEMファイルが必要です。このファイルを作成するときに、cert.pem ではなく fullchain.pem を使用することが重要です。

Pi-hole v6pihole.toml または環境変数):

完全なチェーンを含むPEMファイルを作成します。

ターミナルウィンドウ
cat /etc/letsencrypt/live/yourdomain.com/fullchain.pem \
/etc/letsencrypt/live/yourdomain.com/privkey.pem \
> /etc/pihole/tls.pem

次に、pihole.toml でファイルのパスを設定します。

[webserver.tls]
cert = "/etc/pihole/tls.pem"

設定後にPi-holeを再起動して接続し直すと、ステータスが**「HTTPS(検証済み)」**に変わります。

解決方法2:「信頼されていない証明書を許可する」を有効にする(回避策)

Section titled “解決方法2:「信頼されていない証明書を許可する」を有効にする(回避策)”

すぐにサーバー設定を修正できない場合は、次の手順を実行します。

  1. サーバー設定を開き、詳細オプションを展開します。
  2. **「信頼されていない証明書を許可する」**を有効にします。
  3. 確認画面で証明書のフィンガープリントをピン留めします。

証明書の設定で問題が発生した場合は、よくある質問と解決方法をまとめたFAQを確認してください。