
httpsをhttpへ戻すケースは注意が必要
httpへ戻す作業まとめ
・WEBサイトの各パスをhttpへ戻す事
・HSTSを解除する事
・Googleのインデックスがhttpに戻るまでリダイレクトを掛ける事
・その間SSLを維持する事
簡単に考えてはいけない「SSL化解除」
以前フリーランス体験談7の記事でも触れましたが、httpsのSSL化されたサイトをhttpへと戻す事を検討した事があります。
結果として戻す事はなかったのですが、その時点では簡単にhttpへ戻す事ができると思っていたのでクライアントへ安易に提案をしていましたね。
実はこのhttpsのWEBサイトをhttpへ戻す(例えばURLがhttp://lpeg.info/などに戻す)には注意が必要ですので、ここでまとめておきたいと思います。
httpへと戻す理由
これは過去実際にクライアントとの打ち合わせの中で検討に上がった案件です。
無料SSLサービスが続々提供開始
昨今のGoogleによるWEBサイトのSSL化を推奨する流れを受け、当時どのレンタルサーバー会社も無料で利用できるSSLサービスの提供を開始していました。
その意味でよりSSLが利用しやすい環境になったのは良かったのです。
問題が降りかかったのはこのSSL化の流れが来る前からもともとSSLを利用していたWEBサイトおよび運営者ですね。
レンタルサーバーごとに無料SSLの提供対応が違う
SSL化の流れを受けて、Let's Encriptなどの無料SSLの提供が開始され始めました。
ところが、その提供開始の仕方がレンタルサーバーごとに違っていたのですね。
主に提供方法は以下の2つに分かれています。
・現在利用している契約プランの中で自動で無料SSLが使えるようになる場合
・プラン変更(つまりサーバー引っ越し)をしなければならない場合
上記のいずれかの状態になるのです。
これが前者であれば何も手を加える事なくそのまま無料SSLが利用できます。
しかし後者の場合は無料SSLが使えるプランが別に用意される事になるので、その新しいプランへサーバー引っ越しをしなければならないのです。
上記に関する詳細は、契約プランを変更する場合もサーバー引っ越しが必要の記事をご覧くださいね。
今まで有料サービスを使っていた
クライアントのWEBサイトはそれまで年間で4万円程度掛かる有料のSSLサービスを利用していました。
そのSSLの1年の契約期限が間近に迫る中で、もしその無料SSLの存在を知ったとしたら、お客様としては引越しをしたいと思いますよね?
時間がないので一旦httpを外す話に
サーバー引っ越しをするにしても時間が掛かる事ですし、一旦SSL化を解除してhttpに戻してからSSLを解約しましょうと提案しました。
httpに戻していれば有料SSLが期限切れで使えなくなっても大丈夫です。
時間的に焦る必要が無いので、別のプラン或いは別のサーバーへの引っ越しをじっくり検討できますよね。
結果的にはこの有料SSLの契約期日自体が短い事がネックとなり、結果httpへ戻すという案も採用されないまま別の方策を取る事になりましたね。
こういった理由以外にも、WordpressなどのSSL化が上手くいかず一旦元に戻さなければならないなど、事象としては少ないながらもhttpへ戻そうとするケースはある様です。
httpsをhttpへ戻す方法
ではどのようにしてhttpへ戻すのか、その方法をご紹介しましょう。
具体的な方法
URLをhttpへ書換
まず基本的にはWEBサイト内のhttpsで始まるアドレスを全て、httpへ戻す事ですね。SSL化とは逆のやり方をするだけです。
.htaccessの設定を解除
そしてhttpで読み込みがされたらhttpsへ飛ばす設定をした.htaccessの301リダイレクト設定を解除します。
RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
この記述部分のみを消すだけですね。
これでSSL化を解除すればOKというのが一般的な認識でしょう。
このままでは不十分。httpサイトが映らない
WEBサイトが正常に映らない
ところがこの対処をしてもWEBサイトはhttpの状態で正常に表示されません。
手順としてはこれでいいはずなのですが、httpでアクセスしてもhttpsになって「この接続ではプライバシーが保護されません」と、よく見た事のあるあのページが表示されてしまいます。
この接続ではプライバシーが保護されません
ブラウザは基本的にhttpsで読込しようとする
特にSSLを推奨しているGoogleのブラウザ「Google Chrome」をはじめ、ブラウザはサイトを一旦SSL化をしたらhttpsでまずは読込しようとするようです。
これは別の記事で説明をした「HSTS」が原因となっています。
HSTSとは
HSTSとは初回の1回目の通信時にhttpsでそのWEBサイトアクセスした場合に、その後2回目からはhttpでアクセスしても自動的にhttpsに転送するというブラウザの仕様です。
htaccessのリダイレクトを介さずに、直接https通信をする訳ですね。
ですのでこのHSTS設定を無効化しないと、一発でhttp表示がされない事になります。
HSTSの解除方法
解除方法は2つあります。
.htaccessでのHSTS解除
HSTSを解除するには.htaccessファイルに下の2行を記載します。
Header always unset Strict-Transport-Security Header add Strict-Transport-Security "max-age=0"
これでhttp通信が許可されるようになります。
HSTSの専用ページからドメイン名を削除
Google Chromeのアドレスバーに「chrome://net-internals/#hsts」と入力します。
「Delete domain」という項目がありますので、マスに今回の対象となるドメインを入力して「Delete」をクリックします。
Delete domainの項目
これでhttpsへは接続しなくなり、httpで接続ができるようになります。
ブラウザにhttpsで接続するとべきドメインとして登録されている欄があり、そこからドメイン名を消す事でhttps接続をしない様にする訳ですね。
あわせて読みたい関連記事
Googleにhttpsの状態でインデックスされている場合
これでhttpへの接続はできるようになるのですが、問題なのは既にGoogleにhttpsでインデックスされている場合です。
Googleに対してhttpsで接続すると記録がされている以上、このインデックス内容が元のhttpに書き換わるのを待つしかありません。
ですのでここでさらなる301リダイレクトを設定する必要があります。
.htaccessへ301リダイレクトを追記
RewriteEngine On RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
これによりhttps通信をhttp通信へリダイレクトする事ができますね。
SSLは維持していないといけない
インデックスされているデータの場合、ブラウザは.htaccessファイルにアクセスする前にhttpsでサーバーに接続してしまいます。
ですのでSSLが機能し続けていないとその段階でエラーになってしまいます。
この301リダイレクトで早くhttpの方にインデックスされることを祈りつつ、それまでの間はSSL設定を維持するしかないようです。
クライアントのお話に戻りますが、有料SSLサービスの契約期日はあと何日しかありませんでした。その短い間にGoogleがWEBサイト全体をインデックスされ直すのは不可能なので、これを却下したという訳です。
あわせて読みたい関連記事
いかがだったでしょうか。
httpsをhttpへ戻す際の作業をまとめると以下のようになりますね。
・WEBサイトの各パスをhttpへ戻す事
・HSTSを解除する事
・Googleのインデックスがhttpに戻るまでリダイレクトを掛ける事
・その間SSLを維持する事
ある程度まとまった時間が掛かる事になりますし、あとからもう一度httpsにし直すのであれば、httpへ一旦戻すのはいろいろリスクがあると考えられますね。
クライアントには結果もう1年有料SSLを延長してもらいました。ここまで理由を説明して納得頂けたからこそだと思っています。