自己署名証明書を使用した OpenID Over SSL
-
02-07-2019 - |
質問
私は個人サーバー上に独自のオープン ID プロバイダーをセットアップし、Apache 構成ファイルに https へのリダイレクトを追加しました。安全な接続を使用していない場合 (リダイレクトを無効にしている場合)、正常にログインできますが、リダイレクトを使用すると、次のエラー メッセージが表示されてログインできません。
基礎となる接続が閉じられました。SSL/TLS セキュア チャネルの信頼関係を確立できませんでした。
これは自己署名証明書を使用しているためだと思います。
自己署名証明書が問題かどうか確認できる人はいますか?そうでない場合、何が問題なのか誰かわかりませんか?
解決
OpenID URL に SSL を使用する主な利点は、DNS が改ざんされているかどうかを検出するメカニズムを証明書利用者に提供できることです。自己署名証明書を含む OpenID URL が侵害されたかどうかを証明書利用者が判断することは不可能です。
プロバイダーのエンドポイント URL で SSL を使用することで得られるメリットは他にもあります (関連付けの確立が容易になり、拡張データの盗聴がなくなる) が、自己署名証明書を使用した場合でも同様ですが、私はそれらは二の次だと考えます。
他のヒント
OpenID はリダイレクト透過的な方法で設計されています。必要なキーと値のペアが各リダイレクト時に GET または POST によって保存されている限り、すべてが正しく動作します。
自己署名証明書を使用できないコンシューマとの互換性を実現する最も簡単な解決策は、リダイレクトする非暗号化エンドポイントを使用することです。 checkid_immediate
そして checkid_setup
メッセージを暗号化されたものに送信します。
サーバー コードでこれを行うことは、Web サーバー リダイレクトを使用するよりも簡単です。Web サーバー リダイレクトでは、コードをまとめながら POST リクエストをより簡単に処理できるからです。さらに、適切なチェックが行われている限り、SSL 経由で提供する必要があるかどうかに関係なく、同じエンドポイントを使用してすべての OpenID 操作を処理できます。
たとえば、PHP では、リダイレクトは次のように単純になります。
// Redirect OpenID authentication requests to https:// of same URL
// Assuming valid OpenID operation over GET
if (!isset($_SERVER['HTTPS']) &&
($_GET['openid_mode'] == 'checkid_immediate' ||
$_GET['openid_mode'] == 'checkid_setup'))
http_redirect("https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}");
として openid.return_to
値はプレーンな HTTP エンドポイントに対して生成されましたが、コンシューマーに関する限り、暗号化されていないサーバーのみを扱っています。セッションと nonce で OpenID 2.0 が適切に動作すると仮定すると、コンシューマとサーバーの間で渡される情報が何であれ、悪用可能な情報が明らかになることはありません。ブラウザと OpenID サーバー間の悪用可能な操作 (パスワード スヌーピングやセッション Cookie ハイジャック) は、暗号化されたチャネル経由で行われます。
SSL 経由で認証操作を実行することで、盗聴を防ぐだけでなく、 secure
HTTP Cookie フラグ。これにより、さらに別の保護層が追加されます。 checkid_immediate
操作を許可したい場合。
(免責事項:私は OpenID を初めて使用するため、ここで間違っている可能性があります。) Open ID Consumer (例: StackOverflow) と Open ID Provider (サーバー) の間の通信には HTTPS は必要ありません。HTTPS は同様に問題なく動作します。プレーンな HTTP 経由と同様に安全です。必要なのは、ログイン ページが表示された場合にのみ HTTPS に切り替えるようにサーバーを構成することです。その場合、自己署名証明書を考慮する必要があるのはブラウザだけです。証明書を PC にインポートすると、すべてが、たとえば Verisign 発行の証明書と同じように安全になります。
そのように聞こえます。OpenID サーバーのクライアントはルート証明機関を信頼しません。