当サイト、Codex 日本語版は今後積極的な更新は行わない予定です。後継となる新ユーザーマニュアルは、https://ja.wordpress.org/support/ にあります。
万が一、当サイトで重大な問題を発見した際などは、フォーラムWordSlack #docs チャンネルでお知らせください。</p>

「管理画面での SSL 通信」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
(バーチャルホスト: の部分の翻訳)
(セキュアでないホストのリライトルール)
47行目: 47行目:
 
==== セキュアでないホストのリライトルール ====<!-- Rewrite Rules For The Insecure Host -->
 
==== セキュアでないホストのリライトルール ====<!-- Rewrite Rules For The Insecure Host -->
  
n the .htaccess or virtual host stanza in httpd.conf for your insecure host, add this rewrite rule to automatically go to the secure host when you browse to <nowiki>http://mysite.com/wp-admin/</nowiki> or <nowiki>http://mysite.com/wp-login.php</nowiki>
+
セキュアでないホストの .htaccess あるいは httpd.conf の一部に、<nowiki>http://mysite.com/wp-admin/</nowiki> <nowiki>http://mysite.com/wp-login.php</nowiki> を表示するとき、セキュアなホストへ自動的に飛ぶように、次のリライトルールを追加します。
  
This should go above the main wordpress rewrite block.
+
これは、メインのWordPress リライトブロック上で行なうべきです。
  
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)\ HTTP/ [NC]
+
<pre>
RewriteCond %{HTTPS} !=on [NC]
+
  RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)\ HTTP/ [NC]
RewriteRule ^/?(wp-admin/|wp-login\.php) https://mysite.com%{REQUEST_URI}%{QUERY_STRING} [R=301,QSA,L]
+
  RewriteCond %{HTTPS} !=on [NC]
 +
  RewriteRule ^/?(wp-admin/|wp-login\.php) https://mysite.com%{REQUEST_URI}%{QUERY_STRING} [R=301,QSA,L]
 +
</pre>
  
If you are using permalink rewrite rules, this line must come before <code>RewriteRule ^.*$ - [S=40]</code>.
+
もし、パーマネントのリライトルールを使っている場合、<code>RewriteRule ^.*$ - [S=40]</code> の前に設定しなければなりません。
  
An important idea in this block is using THE_REQUEST, which ensures only actual http requests are rewritten and not local direct file requests, like an include or fopen.
+
ここでの重要なアイデアは、include や fopen のように直接ファイルをリクエストせずに、実際の http リクエストのみを書き換える保証をする THE_REQUEST を使っていることです。
  
 
==== セキュアなホストのリライトルール (Optional) ====<!-- Rewrite Rules For Secure Host (Optional) -->
 
==== セキュアなホストのリライトルール (Optional) ====<!-- Rewrite Rules For Secure Host (Optional) -->

2015年6月7日 (日) 16:31時点における版

このページ「管理画面での SSL 通信」は未翻訳です。和訳や日本語情報を加筆してくださる協力者を求めています

WordPress 2.6 以降から、デフォルトインストールでの管理画面への SSL 対応性が大きく向上しました。また、WordPress 4.0 以降から、FORCE_SSL_LOGINは廃止されています。

管理画面での SSL 通信を簡単に有効化し、強制使用するには、サイトの wp-config.php ファイルで定数を二つ定義します。これらはプラグインファイルで定義するだけでは十分ではありません。必ず wp-config.php ファイルを使う必要があります。


SSL ログイン・管理画面アクセスを強制する

すべてのログインおよび管理画面へのアクセスを SSL を通して行うには、FORCE_SSL_ADMIN 定数を true に設定します。

  define('FORCE_SSL_ADMIN', true);

リバースプロキシの利用

もし、SSL 通信を提供しているリバースプロキシーにおいて、SSL 通信を利用せずにこのオプションを設定した場合、すべてのリクエストが無限リダイレクトループに陥ります。これを避けるために、HTTP_X_FORWARDED_PROTO ヘッダの設定が必要かもしれません。

  define('FORCE_SSL_ADMIN', true);
  if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
       $_SERVER['HTTPS']='on';

追加情報

かなり古いバージョンのWordPress(使うべきではありませんが)あるいは少し特殊な SSL 設定(ie. SSL 証明書が異なるドメイン用のものである等)の場合、この記事の残りは役立ちます。 時々、wp-admin 全体で https プロトコルを使うセキュア通信を動作させたいと思った時に、概念的に下記のような手順で動作します。

  1. 同一URL(ブログURL)で、セキュア(SSL 通信)とそうでない二つのバーチャルホストをセットアップする。
  2. セキュアなバーチャルホストでは、wp-admin 以外のすべてのトラフィックをセキュアでないサイトへ転送する rewrite ルールを設定する。
  3. セキュアでないバーチャルホストでは、wp-admin のすべてのトラフィックをセキュアなバーチャルホストへ転送する rewrite ルールを設定する。
  4. wp-adminでhttps を利用するための管理リンクの書き換え、暗号化通信でのみ動作するための cookieの編集をするために、一度だけ有効にするフィルタやプラグインを設置する。

下記のガイドは、WordPress 1.5 と httpd.conf(.htaccess ではなく)のリライトルールを利用した mod_rewrite 搭載のApache 用ですが、他のホスティングのケースに修正することは簡単です。

バーチャルホスト

セキュアでないサイトに加えて、セキュアサーバー用に設定された(バーチャル)ホストが必要です。この例では、セキュアなバーチャルホストが、セキュアでないホストと同じ DocumentRoot を使っています。もし仮に、wpadmin.mysite.com のような異なる名前のホストを使うことができる場合には、DocumentRoot を wpadmin ディレクトリにリンクします。

セキュアなバーチャルホストの設定については、利用しているISPに問い合わせてください。あるいは、あなた自身が管理権限を持っている場合には、 you cannot use name based virtual hosting to identify different SSL servers を参照してください。

セキュアでないホストのリライトルール

セキュアでないホストの .htaccess あるいは httpd.conf の一部に、http://mysite.com/wp-admin/ や http://mysite.com/wp-login.php を表示するとき、セキュアなホストへ自動的に飛ぶように、次のリライトルールを追加します。

これは、メインのWordPress リライトブロック上で行なうべきです。

  RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)\ HTTP/ [NC]
  RewriteCond %{HTTPS} !=on [NC]
  RewriteRule ^/?(wp-admin/|wp-login\.php) https://mysite.com%{REQUEST_URI}%{QUERY_STRING} [R=301,QSA,L]

もし、パーマネントのリライトルールを使っている場合、RewriteRule ^.*$ - [S=40] の前に設定しなければなりません。

ここでの重要なアイデアは、include や fopen のように直接ファイルをリクエストせずに、実際の http リクエストのみを書き換える保証をする THE_REQUEST を使っていることです。

セキュアなホストのリライトルール (Optional)

These rewrite rules are optional. They disable access to the public site over a secure connection. If you wish to remain logged in to the public portion of your site using the plugin below, you must not add these rules, as the plugin disables the cookie over unencrypted connections.

The secure virtual host should have two rewrite rules in an .htaccess file or in the virtual host declaration (see Using Permalinks for more on rewriting):

   RewriteRule !^/wp-admin/(.*) - [C]
   RewriteRule ^/(.*) http://www.mysite.com/$1 [QSA,L]

The first rule excludes the wp-admin directory from the next rule, which shuffles traffic to the secure site over to the insecure site, to keep things nice and seamless for your audience.

WordPress URIを設定する

For some plugins to work, and for other reasons, you may wish to set your WordPress URI in options to reflect the https protocol by making this setting https://mysite.com. Your blog address should not change.

Config の一節の例

NOTE: The below config is not 100% compatible with WordPress 2.8+, WordPress 2.8 uses some files from the wp-includes folder. The redirection that the first set of Rewrite rules introduces may cause security warnings for some users. See http://core.trac.wordpress.org/ticket/10079 for more information. [Added by DD32, Sorry, Not sure on the exact changes needed here, and i cant test it. This is added to serve as a warning to any new visitors, If you implement this, and get CodePress working in the wp-includes folder correctly, could you please update the below example and remove my paragraph here?]

I think the correct usage would be:

        <IfModule mod_rewrite.c>
                RewriteEngine On
                RewriteRule !^/wp-(admin|includes)/(.*) - [C]
                RewriteRule ^/(.*) http://www.mysite.com/$1 [QSA,L]
        </IfModule>
<VirtualHost nnn.nnn.nnn.nnn:443>
        ServerName www.mysite.com

        SSLEngine On
        SSLCertificateFile    /etc/apache2/ssl/thissite.crt
        SSLCertificateKeyFile /etc/apache2/ssl/thissite.pem
        SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown

        DocumentRoot /var/www/mysite

        <IfModule mod_rewrite.c>
                RewriteEngine On
                RewriteRule !^/wp-admin/(.*) - [C]
                RewriteRule ^/(.*) http://www.mysite.com/$1 [QSA,L]
        </IfModule>
        ...
</VirtualHost>

# 安全でないサイト
<VirtualHost *>
        ServerName www.mysite.com

        DocumentRoot /var/www/ii/mysite

        <Directory /var/www/ii/mysite >
                <IfModule mod_rewrite.c>
                        RewriteEngine On
                        RewriteBase /
                        RewriteCond %{REQUEST_FILENAME} -f [OR]
                        RewriteCond %{REQUEST_FILENAME} -d
                        RewriteRule ^wp-admin/(.*) https://www.mysite.com/wp-admin/$1 [C]
                        RewriteRule ^.*$ - [S=40]
                        RewriteRule ^feed/(feed|rdf|rss|rss2|atom)/?$ /index.php?&feed=$1 [QSA,L]
                        ...
                </IfModule>
         </Directory>
         ...
</VirtualHost>

ログインと登録URLのリライト

これはおそらく、ユーザーのログインと登録にSSLを利用することをお勧めします。次の代替RewriteRulesを検討しましょう。

安全ではない書き方
RewriteRule ^/wp-(admin|login|register)(.*) https://www.mysite.com/wp-$1$2 [C]
セキュアな書き方
RewriteRule !^/wp-(admin|login|register)(.*) - [C]

443番または80番ポートでサイトを動作させるリライト

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# For a site running on port 443 or else (http over ssl)
RewriteCond %{SERVER_PORT}  !^80$
RewriteRule !^wp-(admin|login|register)(.*) - [C]
RewriteRule ^(.*)$ http://%{SERVER_NAME}/$1 [L]

# For a site running on port 80 (http)
RewriteCond %{SERVER_PORT}  ^80$
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^wp-(admin|login|register)(.*) https://%{SERVER_NAME}:10001/wp-$1$2 [L]

RewriteCond %{SERVER_PORT}  ^80$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>

まとめ

This method does not fix some inherent security risks in WordPress, nor does it protect you against man-in-the-middle attacks or other risks that can cripple secure connections.

However, this should make it much harder for a malicious person to steal your cookies and/or authentication headers (if using a server based authentication mechanism, which is now possible starting with WordPress 1.5) and use them to impersonate you and gain access to wp-admin. It also obfuscates the ability to sniff your content, which could be important for legal blogs which may have drafts of documents that need strict protection.

認証

On the author's server, logs indicate that both GET and POST requests are over SSL and that all traffic to wp-admin on the insecure host is being shuttled over to the secure host.

Sample POST log line:

[Thu Apr 28 09:34:33 2005] [info] Subsequent (No.5) HTTPS request received for child 6 (server foo.com:443)
xx.xxx.xxx.xxx - - [28/Apr/2005:09:34:33 -0500] "POST /wp-admin/post.php HTTP/1.1" 302 - "https://foo.com/wp-admin/post.php?acti
on=edit&post=71" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.7) Gecko/20050414 Firefox/1.0.3"

More testing, preferably with a packet sniffer and some hardcore network analysis tools, would help to confirm.

制限事項

The author assumes (but hasn't checked) that if the user has stored cookies/told their browser to remember passwords (not based on form fields but if using certain external auth mechanism) and hits http://www.mysite.com/wp-admin/, those packets are sent in the clear and the cookie/auth headers could be intercepted. Therefore, to ensure maximum security, the user should explicitly use the https host or always log in at the beginning of new sessions.

最新英語版: WordPress Codex » Administration Over SSL最新版との差分