無料のSSL証明書発行サービスのLet’s Encryptはレンタルサーバーのミニバードでは使えなかったため他になにか手段がないかと検索していたらCloudflareというCDN(Content Delivery Network)サービスでSSLも利用できるようなので試してみました。
現在ミニバードは新サービスのスターサーバーになりスターサーバーでは標準でSSLが利用できるためCloudflareで擬似SSL化する必要性はなくなりました。
結果としてはミニバードでも使えました。ちなみにこのブログはミニバードのサブドメインのため導入出来ていません。導入するには独自ドメインが必須です。
Cloudflareとは
まずCDNのCloudflare(クラウドフレア)とは何かといいますと世界中のサーバーからコンテンツ配信を行ってくれるサービスです。私の場合ですと通常であれば契約しているレンタルサーバーのミニバードにブログ訪問者はアクセスしてくるわけですがこれをCloudflareが効率よく配信するために手助けしてくれます。
具体的にはブログのコンテンツをCloudflareがキャッシュしてくれてブログにアクセスがあった場合に世界中に張り巡らされたCloudflareの中継サーバーがミニバードの代わりにコンテンツを配信してくれます。
インターネットではアクセスした人の近くにあるサーバーで応答したほうがアクセス速度が改善するので訪問者は素早くブログにアクセスすることが可能になります。
そしてそのサービスの一環としてSSLにも対応しています。
Cloudflareで出来るSSL化は普通のSSLではない
Cloudflareで出来るSSL化にはフルやフレキシブルといった種類があります。フルはまさしく全部の通信をSSL化してくれるの(普通のSSL)ですがこれはミニバードのコンテンツをSSL化出来ない(無料で出来ないだけです)ため私の環境では使えません。ですのでフレキシブルSSLを利用します。
このフレキシブルSSLというのはアクセスする側からCloudflareまでの通信はSSLで暗号化され、Cloudflareからミニバードまでは暗号化されてない普通のhttp通信になります。ですので何かデータの送信をする場合には安全ではないということに注意が必要です。
ただこのような個人ブログの場合は訪問者はコメントなどを残さない限りデータを送信することはなく受信メインとなります。ブラウザ上で安全ですと表示された方が安心感があるため導入しないよりはしたほうがいいのではないかと思います。
私はこれまで世の中のSSLは全て暗号化されたものだと思っていましたがこんな中途半端はSSLというものもあるのを知りちょっと怖くなりました。さすがに大手企業であればフルSSLでしょうから大丈夫だと思いますが小さなオンライン通販業者などを利用する場合はhttpsとなっていても危険かもしれないと思った方がいいかもしれません。
CloudflareでのフレキシブルSSL導入手順
https://kodak-ism.com/cloudflare-flexible-ssl/
のページを参考にさせてもらいました。
1.CloudflareのCDNサービスを利用するには無料の会員登録が必要です。
Cloudflareの会員登録ページにアクセスしEメールとパスワードを入力します。利用条件とプライバシーポリシーに同意するチェックを付けて「Create account」をクリックします。
2. Add a websiteのテキスト入力ボックスにCDN(SSL)を利用したいドメインを入力し「Scan DNS records」をクリックします。
DNSレコードのスキャンが終わるまでしばらく待ちます。スキャン中にはCloudflareがどんなものかという動画が流れました。
スキャン終了後「Continue」をクリックします。
3.現在のDNSレコードが表示されるのでドメインとwwwにStatusがクラウドフレアのマークになっているのを確認し「Continue」をクリックします。サブドメインなどがある場合はここで追加する必要があるのかと思います。
4.Cloudflareを利用するプランを選択します。初期選択は有料のビジネスプランになってるのでFree Websiteを選択します。
5.ドメインのネームサーバーをCloudflareのネームサーバーに変更する必要があります。ドメイン管理会社のDNS変更ページで変更し、「Continue」をクリックします。
6.次のページでOverviewが表示されていますがSSL設定が初期では「Full」になっているためこれを「Flexble」に変更します。
Cryptoメニューをクリックし、SSLをFlexbleにします。
7. 24時間以内にネームサーバーの変更が終わり、StatusがActiveに変われば利用可能になります。(SSL証明書発行とはまたタイミングが異なるのでこのActiveはCDNが利用できるようになったかどうかのようです。)Cryptoメニューで証明書が発行されたかも確認し、発行されていたらブラウザでhttpsのアドレスで表示できるか確認するといいと思います。
8.次にWordPressにログインし、サイトアドレスなどをhttpsに変更します。
注意:これをやってしまったら管理者画面にログインできなくなってしまいました。私はSiteGuardというセキュリティプラグインで管理ページアクセス制限を掛けていたのですがそれが有効になっているとログイン不可能になりFTPでのファイル修正が必要になりました。ですのでもしSiteGuardプラグインを利用している場合は管理ページアクセス制限はオフにしましょう。
SiteGuardプラグインが原因でログイン出来なくなった場合についてはこちらを参照しました。
http://beadored.com/can-not-login-because-siteguard-wp-plugin/
上記のページでは.htaccessのSiteGuardによる記述を削除していますが
以下のADMINフィルターの記述だけ消せばログイン出来るようになりました。
#==== SITEGUARD_ADMIN_FILTER_SETTINGS_START
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^404-siteguard – [L]
RewriteRule ^wp-admin/css – [L]
RewriteRule ^wp-admin/images – [L]
RewriteRule ^wp-admin/admin-ajax.php – [L]
RewriteCond %{REMOTE_ADDR} !^(***\.0\.0\.1|***\.***\.***\.***)$
RewriteCond %{REMOTE_ADDR} !^***\.***\.***\.***$
RewriteCond %{REMOTE_ADDR} !^***\.***\.***\.***$
RewriteRule ^wp-admin 404-siteguard [L]
</IfModule>
#==== SITEGUARD_ADMIN_FILTER_SETTINGS_END***は各自の環境によって異なります。
管理ページにアクセスできなくなると焦りますね。他にも国外IPアクセス制限などがレンタルサーバーで設定してあったりするとCloudflareが国外IPからアクセスするため接続出来なくなることもあるため国外IP制限がある場合はOFFにしておきましょう。
自分のサイトの安全性を高めるためのはずが安全性が低くなってる気がするのは気のせいでしょうかwセキュリティプラグインで補完するしかないですね。
9.最後にCloudflareのCryptoメニューでHTTP Strict Transport Security(HSTS)を有効(Enable)にします。これで訪問者はhttpでアクセスしてきても強制的に暗号化されたhttpsで通信ができるようになるそうです。
これを設定したらしばらくしたらこの設定が影響してかアクセス出来なくなりました。フレキシブルSSLの場合は無効にしておかないとだめなようです。
httpsでのアクセスが出来るようになった次の日くらいからアクセスが出来なくなりCloudflareに問い合わせましたがフレキシブルSSLとHSTSの併用は可能とのことでした。
なので原因はいまいちよくわかりません。ネットで調べてみるとセキュリティ対策ソフトなどが問題になりそうな情報も見ましたが結局最終的によくわからないまま復帰していました。
HSTSは使わない方が無難ではないかと思います。
以上でSSL化が完了です。今回はほとんど新しいサイトでSSL化を試してみたため内部リンクなどの変更も必要ありませんでしたがリンク先アドレスもhttp→httpsに変えるなども必要になります。またGoogle Search Consoleなどの登録もhttpとhttpsでは別物になるので再度登録が必要です。
SSL利用したいからサブドメイン利用やめようかな・・・。