Macサーバー環境下のWordPressのSSL化後、管理画面のリダイレクトループ解決のためにしたこと。
ついに自宅サーバー最大の砦、WordpressのSSLに成功しました。その作業手順を説明したいと思います。
作業中に色々トラブってアクセス不能になりましたが、スマホのwordpressアプリからはなぜか安定して接続でいていたので、先にそちらの設定をしておくことをお勧めします。
まずは証明書の発行。使ったのはLet’s Encryptというサービス。昔はオレオレ証明書作っていたなぁと懐古。
ターミナルからHome brewでinstall Certbotを行います。この時、勝手に周辺環境もアップデートされ、phpも微妙にいじられたのでご注意。途中で利用規約などの質問に答えていきます。
途中でランダムな文字列1のファイルをhttps://example.com/.well-known/acme-challenge/ランダムな文字列2のフォルダに格納せよと言われたので、miなどのテキストエディタにランダムな文字列1をコピペし、ランダムな文字列2のフォルダに格納します。出来上がったら、実際にアクセスしてみて、ランダムな文字列1を閲覧できるか確認します。
確認ができたら、Certbotの続きでエンターを押します。問題がなければ、ect/letsencryptフォルダにfullchain.pem, cert.pem, privkey.pem, chain.pemが出来上がります。
続いて、apacheの設定に移ります。
まず、httpdで
#LoadModule ssl_module libexec/httpsd/libssl.so
#LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
#LoadModule include_module libexec/apache2/mod_include.so (念の為)
#Include /private/etc/apache2/extra/httpsd-ssl.conf
#LoadModule rewrite_module libexec/apache2/mod_rewrite.so (リダイレクト設定で使う)
の全ての#を消して、保存。apacheの再起動をかけます。
続いて/etc/apache2/extra/httpsd-ssl.confファイルを開き、それぞれ
SSLCertificateFileにcert.pem
SSLCertificateKeyFile にprivkey.pem
SSLCertificateChainFileにfullchian.pem
のパスを入力します。デフォルトではapache2のフォルダに指定してありますが、certbotのreadmeにはファイルを動かすなと書いてあったので、letsencrypt内のパスを指定しました。
再度、apacheの再起動をかけます。
ここまで来たら、https://example.comにアクセス可能になると思います。
そうしたら、今度はwordpress内の設定画面に行き、Wordpress URLとHome URLをそれぞれにhttpsにします。
保存した瞬間接続が切れると思うので、.htaccessからリダイレクトの設定をします。
ちなみに私はここで管理画面だけがリダイレクトループに陥りました。
.htaccessの一番上の行に
RewriteEngine onRewriteCond %{httpsS} offRewriteRule ^(.*)$ https://%{https_HOST}%{REQUEST_URI} [R=301,L]
と記述します。ミソは一番上の行、# Begin wordpress~~が始まる前の行に追記します。
また、管理画面のssl通信の指定のためにwordpressのconfig.phpに
define('FORCE_SSL_ADMIN', true); if ( ! empty( $_SERVER['https_X_FORWARDED_PROTO'] ) && $_SERVER['https_X_FORWARDED_PROTO'] == 'httpss' ) { $_SERVER['httpsS']='on'; } と追記します。場所はデバッグモードについての記述の上にしたと思います。
以上で無事にSSL化が完了したと思います。正味3日くらい悩みながら作業していたと思います。
グッドラック!