サラリーマンである私は土日は基本的に仕事がお休みです。
先週このサイトを立ち上げたものの、平日はなかなか手を出せません。
その間、休日になったらやってみたい、ということがたくさん浮かんでいました。
これもその一つです。
Contents
WordPress管理画面のみへのSSL接続
WordPressの管理画面(wp-admin)には、自宅LAN内だけでなく、スマホや会社PCからもアクセスできるのですが、通常のHTTPアクセスで、ID、Passwordを送るのに抵抗を感じていました。
※会社PCからアクセス「できる」だけで、アクセス「している」わけではありません。念のため^^;
また、管理画面そのものも、基本的には自分だけしか見ることができない、本来非公開のものですので、暗号化無しのHTTP通信でやりとりするのは気持ちのよいものではありませんでした。
会社PCの場合、会社のFWで通信内容を記録していますので、何やってるかモロバレです。
※あくまで、会社PCからアクセスしたとしたら、です。
とはいえ、サイト全体をSSL化すると、通常のブログ閲覧でもSSL通信に対応することになり、サーバへの負荷が上がってしまいます。
※今は負荷を心配するような、大量なアクセスはありません。はい。念のため。
管理画面のみ、SSLアクセスを強制化するような設定が望ましいわけです。
管理画面SSL接続の設定方法は、WordPress公式サイトにありました
なんということでしょう。
ドンピシャ情報が公式サイトにありました。すばらしい。ここ。
2つのケースが紹介されていました。
- SSLログインのみを強制する方法
- SSLログイン・管理画面アクセスを強制する方法
私のニーズから、後者を選びます。
設定後の挙動を見るに、この設定によって「http://~」で管理画面にアクセスしてきたら、強制的に「https://~」に転送するというもののようです。
WordPress自身がSSLの証明書を作って、SSL通信を行うわけではなく、それはあくまでwebサーバの役割です。(当たり前ですが)
ですので、webサーバには、「https://~」で「wp-admin」ディレクトリにアクセスできるよう、VirtualHostなどを用いて、適切に設定されている必要があります。
SSLの証明書は、通称「オレオレ証明書」を使います。SSL接続するのは自分だけで、一般の閲覧者にはむしろSSL接続して欲しくないので、接続時に「この証明書は怪しい!」と警告が出た方がよいのです。
設定の流れ
設定の大まかな手順はこんな感じ。
- wp-config.php へ、SSL強制の設定を追記
- webサーバSSL設定、ファイヤーウォールへの設定(必要なら)
- webサーバ再起動
基本的に上のwp-config.phpへの設定追記のみで、SSL接続強制されます。
webサーバには、HTTPからHTTPSへの転送する、Rewriteの設定は不要です。
ただし、webサーバではあらかじめ、https://~ のアクセスを受け付けられるように設定されていなければなりません。
wp-config.phpへ追記
WordPressコンテンツのディレクトリトップにある、「wp-config.php」に以下の行を追加します。
define(‘FORCE_SSL_ADMIN‘, true);
管理画面はHTTP、ログインのみをSSL強制とする場合は次の一行となります。
define(‘FORCE_SSL_LOGIN‘, true);
ただしいずれも、wp-config.php内の、次の記述より上に書かなければなりません。
require_once(ABSPATH . ‘wp-settings.php’);
webサーバ(apache)のSSL設定
ブログサイトのディレクトリには、httpアクセスの設定しかしていませんでした。sslでもアクセスできるよう、設定を追加します。
—http.conf—一部抜粋
通常アクセス用の設定。変更無し。
<VirtualHost *:80>
ServerAdmin yyy@xxx.com
DocumentRoot /wordpressのコンテンツパス/
ServerName xxx.com:80
ErrorLog logs/wordpress-error_log ログファイル名、なんでもOK
TransferLog logs/wordpress-access_log ログファイル名、なんでもOK
<Directory />
AllowOverride None
</Directory>
</VirtualHost>
今回追加。同じディレクトリにSSL経由でアクセスさせる設定。
<VirtualHost *:443>
ServerAdmin yyy@xxx.com
DocumentRoot /wordpressのコンテンツパス/
ServerName xxx.com:443
ErrorLog logs/wordpress-admin-error_log ログファイル名、なんでもOK
TransferLog logs/wordpress-admin-access_log ログファイル名、なんでもOKSSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /証明書配置パス/ssl.crt
SSLCertificateKeyFile /証明書配置パス/ssl.key
CustomLog logs/wordpress-admin-request_log \
“%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \”%r\” %b”
<Directory />
AllowOverride None
</Directory>
</VirtualHost>
—以上、httpd.conf抜粋—
SSL証明書の準備
httpd.confの設定にあった、
SSLCertificateFile /証明書配置パス/ssl.crt
SSLCertificateKeyFile /証明書配置パス/ssl.key
の2つの証明書を準備しなければなりません。
認証機関に認証してもらう証明書を利用すると、SSLアクセス時の警告が出なくなりますが、有料です。
希に無料の証明書を発行しているところもあります。参考までに。→StartCOMの無料証明書。
やり方はググったらたくさん出てきます。
冒頭にも書きましたが、今回はSSL利用者が自分のみであるため、また、一般の閲覧者にはむしろSSL接続して欲しくないので、「オレオレ証明書」を使います。
オレオレ証明書作成手順
オレオレ証明書は、第三者の認証のない、自分が自分を認証する証明書です。自分が利用するだけなら、これほど信頼のおける証明書はありません。:P
cd /証明書配置パス
$ openssl genrsa 2048 > ssl.key
Generating RSA private key, 2048 bit long modulus
………………………………………..+++
………..+++
e is 65537 (0x10001)$ openssl req -new -key ssl.key > ssl.csr
いろいろと運営者の情報を聞いてくるので、適当に設定。$ openssl x509 -days 3650 -req -signkey ssl.key < ssl.csr > ssl.crt
Signature ok
subject=/C=JP/ST=xxxx/L=xxxx/O=xxxx/OU=xxxx/CN=xxxx/emailAddress=yyy@xxx.com
Getting Private key証明書有効期限は3650日(10年)です。
以上で、カレントパスに次の3ファイルができているはずです。
- ssl.key
- ssl.csr
- ssl.crt
ssl.keyとssl.crtを、前段で設定したVirtualHostが参照します。
おわりに
webサーバの再起動と、ファイアーウォールやルータのtcp:443番を空けておくことをお忘れなく。
以上で設定完了です。
WordPress管理画面にアクセスしようとすると、自動的にHTTPSのSSL経由の通信に変更します。
これで安心して会社PCから外出先スマホからアクセスできます。
コメント