レンタルサーバーがOSを入れ替え、同時にSSL証明書が利用できるようになった
先日、私が借りているレンタルサーバーがOSを入れ替え、それと同時に無料でSSL証明書が利用できるようになりました。
1ヶ月以上前に通知があったのですが、サーバー運営会社からは、特に何か今すぐ対応しなければいけない事があるという連絡はなかった上、私はSSLの事、httpsの事についてほとんど知識はなく、どうすれば良いのかわからなかったので、しばらく放っておきました。
レンタルサーバーのマニュアルには、確かにSSL証明書の発行(インストール)の仕方が書いてありましたが、それはSSLのボタンをクリックするだけという簡単な記述があるだけで、サイト側でしなければならない設定等については何も記述がありませんでした。
なので、時間があるときに調べて学んで、それから設定すればいいと思っていました。
https化を後回しにしてたら、検索でhttpsのURLが表示されていた
ところがある時、何かを検索していたら私のあるサイトの投稿が検索表示されていたので、何気なくクリックしてみたところ、「証明書エラー」とか「安全でない接続」とか「プライバシーエラー」(ブラウザによって表現が違うだけです)が表示され、サイトは表示されませんでした。
あれ?おかしいな?と思い、調べてみると、それは”https”のURLであるにもかかわらずSSLの証明書が発行されていないかもしくは期限切れであるかのどちらかであることがわかりました。
つまり検索表示された私のサイトの投稿のURLはいつの間にか”https”になっていたのです。
無知な私はこの時初めて知りました。他のサーバーも同じなのかどうかは知りませんが、私が利用しているレンタルサーバーでは、SSL対応になったということは、証明書を発行しなくても自動的に”http”と”https”のどちらでもアクセスできる状態になったという事なのでした。
サーバー側が”http”しかアクセスできない状態だったら、httpsでアクセスしても、”そのページがない”というエラーが出ます。
しかし今回の場合、「ページはあるがアクセスするのは危険」というようなエラーなのです。
そして、”http”と”https”の両方が存在してしまうということは、今のままだと”https”を優先すると宣言しているGoogleの検索において危険なページばかりが検索表示されてしまう上、”http”と”https”のページが重複コンテンツとみなされてしまいます。
こうなるともう必然的にSSLの証明書を発行(インストール)するしかありません。
もちろん、”https”へのアクセスを”http”に強制的にリダイレクトさせるという方法もあり、それが一番簡単なのですが、今後は”https”は必須になるだろうし、いずれやろうと思っていたことでもあったので、この際にhttps化をしてしまおうと思いました。
SSL証明書のインストール
私が利用しているサーバーでは、SSLの証明書のインストールはとても簡単でした。
ドメインを選択し、各ドメイン用のページ内のSSLと書かれたボタンをクリックし、次の画面で表示されたインストールボタンをクリックするだけで完了です。
たったこれだけで、もう”https”でアクセスしても「このページは危険です」というようなエラーはでなくなり、ちゃんと表示されました。
サイトのURLを”https”に統一する(常時SSL)
SSL証明書を発行しただけでは、”https”でのアクセスでもちゃんと表示されるだけで、相変わらずデュアルアクセスできてしまうという問題が残ります。
常時SSLにする為には”http”へのアクセスを”https”にリダイレクトしなければなりません。
しかしながら私にはあまり知識がありませんでしたので、いろいろ調べ、試し、うまくいかなければまた調べてまた試す、を繰り返すことになりました。
まずはワードプレスのURLの設定
私のサイトはほとんどがワードプレスなので、ワードプレスで行った作業のみ書くことにします。
ワードプレスの設定の中の一般設定には、「WordPress アドレス (URL)」と「サイトアドレス (URL)」という項目があり、そこに記載されているURLを”http”から”https”に書き換えました。
“https”に統一するのであれば、ここを書き換えることは必須です。
内部リンクをhttpsへ書き換え
サイトの内部リンクを”http”から”https”に書き換えました。
プラグインを使って瞬時に全て書き換えるという方法もあるようですが、私のサイトはどれも内部リンクの数は少ないので、確認しながら手作業で行いました。
調べてみるとSSL化のプラグインはいくつかあり、非常に便利だったのですが、たいして手間のかからない一回のみの作業の為に余計なプラグインをインストールしたくなかったことや、便利ではあるものの、余計な操作をしてしまい、後で再修正が必要な場合があることなどもプラグインを使用しなかった理由の一つです。
.htaccessに”https”へのリダイレクト処理を書き加える
ネットでいろいろ調べてみると、.htaccessでリダイレクトさせるには以下の2行を加えればいいようでした。
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
ただ、ワードプレスの場合、”# BEGIN WordPress”と#” END WordPress”の間に記述するとワードプレスによって更新されてしまうので、外側に記述し、以下のようにしました。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule> # END WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>
※青字の箇所が追加部分です。
これでサイトに”http”でアクセスがあっても”https”のURLにリダイレクトされました。
GoogleアナリティクスやSearch Consoleの追加・修正
次にGoogleアナリティクスの[管理]ページでプロパティを選択し、プロパティー設定で[デフォルトのURL]のサイトのURLの”http”の部分を”https”に変更しました。
次にそのプロパティーに属するビューでサイトを選択し、ビュー設定でウェブサイトのURLの”http”の部分を”https”に変更しました。
これを全サイトにおこないました。
さらにGoogle Search Consoleで、既存のhttpサイトに加え、同じドメインでhttpsのサイトを追加しました。と同時に追加した”https”のサイトでサイトマップを送信し、Fetch as Googleを使ってインデックスのリクエスト送信をしました。
これで一通り完了、と思っていたのですが、まだ問題がありました。
広告やプラグインをSSL対応にする
サイトを”https”で表示させると”http”と”https”の混在に起因するエラーが出てしまいました。
サイト自体はhttps化できたのですが、サイトの表示とともに読み込んでいるスクリプトがhttpのままだったのです。
読み込んでいるスクリプトで考えられるのは、プラグインとアドセンスやその他の広告です。
そのうちアドセンスは既に”https”に対応したスクリプトになっていたので、他の広告のスクリプトを見てみました。すると案の定スクリプトは”http”になっていました。
そこでいったん広告をはずしてみましたが、やはりまだエラーが出るサイトがありました。
エラーが出なかったサイトに関しては、広告を”https”のスクリプトに変えることで解決しました。
エラーが出たサイトを対処すべく、いろいろと調べてみると、原因は会員登録系のプラグインでした。アップデートすれば対応するみたいなのですが、以前テストでアップデートした際に、他の検索系のプラグインが動かなくなってしまったという嫌な経験があるのと、そのプラグインも独自にカスタマイズしていたため、下手にいじると不具合が出てしまう可能性があるので、他の方法を探すことにしました。
すると、”SSL Insecure Content Fixer“という便利なプラグインがあることを知りました。どうやらSSLページのエラーを強制的にhttpsにすることで修復してくれるプラグインとのことです。
早速エラーが出ているサイトにインストールして設定し、確認してみました。
するとどうでしょう。きれいに修復されていて、エラーは全くでなくなっていました。
これで一安心・・・
かと思いきや、一部のサイトでは、エラーは出なくなったものの、会員登録機能が使えなくなっていることに気づきました。
これはまずい・・・と思い、不具合が出たサイトの”SSL Insecure Content Fixer”をすぐに無効化し、エラーの根源であると思われる会員登録時のセキュリティーチェック機能をはずすことにしました。
会員登録時のセキュリティーチェック機能はまた別の方法で考えることにしました。
これでとりあえずではあるが、やっと落ち着いた・・・と思ったのもつかの間でした。
まだ常時SSLにはなってなかった・・・
完全にhttps化できたと思って安心していたら、まだ完全ではありませんでした。
https化が終えたと思ってから2,3日後に検索してたら、自分のサイトのページが表示されていたので、何気なくまたクリックしてみると、なんと表示されたページのURLはまだ”http”だったのです。
あれ?リダイレクトの設定したはずなのに。
検索エンジンが全てのページに対してはまだ”https”に置き換わってないのは仕方ないにしても、表示される際にはリダイレクトで”https”に転送されている筈だったのです。
再び調査の開始です。確かにトップページはリダイレクトされるため、httpにはなりません。しかしその他のページは”http”でアクセスできてしまいました。
いろいろ調べてみると、常時SSLにするには.htaccessにHTST(HTTP Strict Transport Security)の設定の記述が必要との事でした。現時点では、https化の仕方を書いているサイトでも、あまりこのことに触れているサイトは少ないようです。
最終的に.htaccessは以下のように記述しました。
# BEGIN WordPress
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>
※追加したHSTSの記述は赤字の部分です。キャッシュの期限は1年にしてあります。
これでとりあえず完了です。この記述を加えることで、初回こそhttpでアクセスしてしまいますが、2回目以降はhttpsでアクセスできます。
Googleがおこなっているプリロードリスト登録サービスから登録すれば、初回からhttpsでアクセスできますが、登録には条件があり、かつ誤って登録してしまった場合の修正処理が大変なので、私は登録するのはやめておきました。
以上が私のhttps化に関するメモでした。