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日くらい悩みながら作業していたと思います。

グッドラック!