web-dev-qa-db-ja.com

保護Wordpress代替ポートの管理インターフェース

私は自己ホスト型のWordpressブログを持っています。可能な限り、SSLとX.509クライアント証明書認証を使用してWebアプリへの管理インターフェイスを保護しようとしています。これらすべてが次のような場合に適切に機能しています。 phpMyAdminなので、Webサーバーの技術的な部分はすべて整っています。

私のホスティング設定は次のとおりです。

  • nginx 0.7.x
  • Fpmパッチを適用したPHP5.2.10
  • MySQL 5.x

これらすべてをVPSで実行しているので、外部IPは1つだけです。ボックスで実行されている他のSSLWebサイトがいくつかあります。1つはデフォルトポートで、他はすべて代替ポートで実行されます(それぞれがホスト名に一致する異なる証明書を持つことができるように)。

私の意図は、2つのサーバー構成ブロックを持つことでした。

  1. / wp-adminの下にあるものにアクセスしようとすると、404を返す1つのサービングblog.domain.comポート80
  2. もう1つは、URL制限のないSSLを使用してポート8443で実行されていますが、有効なX.509クライアント証明書を提示する必要がありました。

私が直面している問題は、Wordpressが2つの異なるポートでアクセスされることを好まないということです。私が行こうとするときはいつでも https://blog.domain.com:844 、それは私を https://blog.domain.com にリダイレクトします。これは完全に別の仮想ホストです(サーバー上のメインサイトで、デフォルトのポートで実行されています)。ブラウザの証明書名エラー。警告を上書きしても、wordpressサイトとは通信していません。

ブログのメインURLはwp_optionsテーブルに保存されています。

mysql> select option_value from wp_options where option_name = 'siteurl';
+------------------------------+
| option_value                 |
+------------------------------+
| http://blog.domain.com       |
+------------------------------+
1 row in set (0.00 sec)

mysql>

したがって、メインURLを https://blog.domain.com:844 に設定してブログファイルの2番目のコピーを作成し、その方法で管理インターフェイスにアクセスできるわけではありません。

何か案は?

更新

提案された答えでしばらく遊んだ後、私は自分が望むことを正確に行うことは不可能であるという結論に達しました。 wordpressの機能を有効にすると、ユーザーは/ wp-(admin | login | register)にSSLリクエストを送信します。これは、SSL側でX.509クライアント証明書が必要な場合は実行できません。 。

私が思いついた最善の解決策は、要求を非SSLnginxにプロキシするだけの証明書認証を使用してSSLフロントエンドをセットアップすることでした。それでも、ユーザー登録とプロファイル管理で使用されるCSSとJavascriptの多くはそのディレクトリからのものであるため、/ wp-adminへの非SSLアクセスを完全に遮断することはできません。

HTTPを介して/ wp-adminでCSS、画像、Javascriptへのアクセスを許可し、PHPスクリプトにSSLアクセスを要求するだけですが、ユーザーはプロファイルを変更できません(配色、表示名など)次のステップは、通常のユーザーに必要なPHPスクリプトのサブセットを識別し、残りを拒否しながらそれらをHTTP経由で通過させることですが、私はwordpress開発チームは物事を再編成する必要があります。

これは、サーバーがプレーンHTTPを介して管理することを許可している場合でも、SSLを介してのみブログを管理するように自分自身をトレーニングすることに帰着すると思います。

2
James F

これはあなたを助けるかもしれません、wordpress 2.6の時点で、あなたは管理者とログインエリアを強制的にssledすることができます。

http://codex.wordpress.org/Administration_Over_SSL

  define('FORCE_SSL_LOGIN', true);
  define('FORCE_SSL_ADMIN', true);

場合によっては、wp-admin全体をhttpsプロトコルを使用した安全な接続で実行する必要があります。概念的には、手順は次のように機能します。

同じURL(ブログのURL)で2つの仮想ホストをセットアップします。1つは安全で、もう1つは安全ではありません。安全な仮想ホストで、wp-admin以外のすべてのトラフィックを安全でないサイトにシャトルする書き換えルールを設定します。安全でない仮想ホストで、wp-adminへのすべてのトラフィックを安全なホストにシャトルする書き換えルールを設定します。 wp-adminのリンクをフィルタリングするフィルターを(プラグインを介して)配置します。これにより、アクティブ化されると、管理リンクはhttpsを使用するように書き換えられ、暗号化された接続でのみ機能するようにCookieが編集されます。

彼らが言及しているプラ​​グインは admin ssl と呼ばれます。

1
reconbot

私は同様の問題に直面しています。かなり長い間wordpressを使用していて、/ wp-admin /にSSLを介して動作させたいと思っています。

だから私はしました:

_RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/(wp-login.php|wp-admin/) https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
_

これはほとんど機能しています。 http:// website/wp-admin / にアクセスすると、SSL経由でwp-login.phpにリダイレクトされますが、ログインプロセスの後、_https://website/http://website/wp-admin/_にリダイレクトされます(これwordpressは、書き換えルールではうまく機能しない内部リダイレクトを使用するため、タイプミスではありません)。
ロードすると http:// website/wp-admin / 再びリダイレクトされます https:// website/wp-admin / そしてすべてが正常に動作しています。

しかし、最近のWordpressリリースの前に、別の問題がありました。wp-login.phpページで、ログインフォームアクションが http://website/wp-login.php)に設定されていました。 。したがって、ログイン情報は明確に送信されました(したがって、wp-login.phpにパッチを適用する必要がありました)

最近(2.6.0以降)Wordpressリリースは_FORCE_SSL_LOGIN_設定を追加します。wp-config.phpにdefine ('FORCE_SSL_LOGIN','true');を入れると、wp-loginでフォームアクションが実行されます。 .php to https://website/wp-login.php (wp-login.phpを少し変更するだけで、:8443を追加できます)

したがって、 `FORCE_SSL_LOGIN + rewriteを使用すると安全ですが、ログインプロセス後にwp-adminurlをリロードする必要があります。

2.6.0も_FORCE_SSL_ADMIN_を追加しますが、これをtrueに設定すると(リライトが構成されているか、構成されている場合)、無期限にリダイレクトされます http:// website/wp-admin / FORCE_SSL_LOGINをtrueに設定し、wp-login.phpにパッチを適用してポート8443を使用しようとする場合があります。また、FORCE_SSL_ADMINを試すこともできます(なぜ機能しないのかはまだわかりませんが、機能する可能性があります)

1
radius

うーん...これには、wp-adminセクションをメインサイトから分離するためにwordpressをマングリングする必要があるのではないかと疑っていますが、私が知る限り、それは設計されていません。

安全なSSL仮想ホスト(同じdocrootを使用)を設定してから、.htaccessマジック(以前に行った)を介して、すべての/ wp-adminリクエストにhttpではなくhttpsを経由させることはできませんか?

これは明らかに管理セクション全体を分離するものではありませんが、少なくとも暗号化されていないトラフィックが停止することを意味します。

0
Coops