SSL化しないと本サイトへのアクセスが躊躇われるだろうと考えて、遅まきながらSSL化を行った。(レンタルサーバーが無料のSSL証明書を出していることに今頃気が付いたのは秘密だww)SSLの技術的なところをクリアする方法をググったら、単純にSSLのアドインを導入するのが手っ取り早いということで最も多くインストールされている「Really Simple SSL」を使ったところ、あっさりとHTTPSでサイトを表示できるようになったんだが・・・

WordPressにログインしてダッシュボードを見ると、サイトヘルスに改善が必要と表示される。で、詳細を確認すると「推奨するセキュリティヘッダーが有効ではありません」ってのに出くわす。そこから<詳細>をクリックすると、こちらのReally Simple SSLのサイトの説明に飛ぶ。要はそこに説明されているセンテンスを追加すればいいわけねと。でだ、そこに記載されている「.htaccess」ファイルの記述に従って、以下の6行をファイルの最後に加えてアップロードして、本サイトにアクセスすると「500 internal server error」に出くわしてしまう。

Header always set Strict-Transport-Security: “max-age=31536000” env=HTTPS
Header always set Content-Security-Policy “upgrade-insecure-requests”
Header always set X-Content-Type-Options “nosniff”
Header always set X-XSS-Protection “1; mode=block”
Header always set Expect-CT “max-age=7776000, enforce”
Header always set Referrer-Policy: “no-referrer-when-downgrade”

おかしいなと、アップロードした.htaccessファイルを元のファイルに戻してアクセスするとちゃんと表示されるので、プラグインのメニューからSSLを選ぶと以下のような画面に出くわす。

つまり、プレミアムっていうのは金払えってことねww 調べてみると1ライセンスで$29で1年間のサポートとアップデートに対応するわけです。アップグレードするとセキュリティヘッダーを設定できる画面とかボタンが表示されるのでしょう。これって、上記のReally Simple SSLのサイトの説明と矛盾しない? こうやって、.htaccessファイルを編集しなさいって説明しながら、一方でプレミアムにアップグレードしないとそこは設定できないよってのはさ。しかも、こちらのWordPressのサポートサイトにおいて、「このプラグインでHSTSが設定されないってのは片手落ち。標準以外のセキュリティは金払えってのは納得いかない」と評価している人に対して「誰でも自分自身でHSTSは設定できるしSSL化はできるわけだが、このプラグインは、.htaccessファイルなどを設定できない人々に対して手間をかけずにSSL化できるようにサポートしている。付加的なセキュリティを追加するのにSmall Priceを請求するのはリーズナブルと考える」と回答している。ご尤もだけど、自分でHSTSなどを追加するための方法が当該プラグインのサイトに間違って記載されていれば、自分じゃできないわけじゃない? じゃあ、その回答はちょっと違っているよなあ。

で、こんな回答されているのにプレミアムにアップグレードするのは癪じゃないか! で、ちょこっと考えてみたわけさ。たぶん、この6行を加える位置が、説明とは異なり間違っているのだろうと。それで、Really Simple SSLによって記述されている部分をもう一度見てみると・・・

# BEGIN rlrssslReallySimpleSSL rsssl_version[4.0.5]
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
#ENDrlrssslReallySimpleSSL

ここで、はたと気が付いた。SSL化における.htaccessファイルの編集がBEGINとENDの間で行われているのだから、その間に6行を挿入すべきじゃないか?試してみましょう。以下の通りに挿入すると・・・

#BEGIN rlrssslReallySimpleSSL rsssl_version[4.0.5]
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Header always set Strict-Transport-Security: “max-age=31536000” env=HTTPS
Header always set Content-Security-Policy “upgrade-insecure-requests”
Header always set X-Content-Type-Options “nosniff”
Header always set X-XSS-Protection “1; mode=block”
Header always set Expect-CT “max-age=7776000, enforce”
Header always set Referrer-Policy: “no-referrer-when-downgrade”
</IfModule>
# END rlrssslReallySimpleSSL

で、アップロードしたところ問題なく表示。その後、ヘッダーのセキュリティ度をチェックできるサイトsecurtyheaders.comでチェックすると以下の通りA判定。

俺と同じ程度の技術的な理解しかない人の参考になれば幸いです。なお、Feature PolicyとContent Security Policyは設定が難しくてサイトを壊す恐れがあるってことで追加していません。これでも、A判定なんで良しとしましょう。また、本投稿に技術的には不適切な表現があるかもしれません。その場合はコメント欄からご指摘いただけると助かります。

追記:2021/3/27

Really Simple SSLのサイトの説明がいつの間にか訂正されていて、BeginとEndの間に6行が記載されていました。誰かに指摘されたんでしょうね。自分がやったことが正しかったとわかってなによりとww