無料の独自ドメインでお金をかけずに常時SSL環境を整える
こんにちは、たけぼーです。
今日は、お金を一切かけずに常時SSL環境の構築を目指してみましょう。
SSLとは
SSLとは、webを暗号化しながら通信を行う技術で、URLの先頭がhttps://~で始まります。
例えば、Amazonなんかのショッピングサイトやgoogleなど、様々なサイトで活躍する技術です。
これによって、個人情報とかパスワードとか、誰かに盗まれる危険性が低くなるわけです。
google chromeでは、入力フォームがあるページがSSLに対応していなければ、『保護されていません』と表示するようになり、少し話題になりましたよね。
特に、Googleは常時SSLを推奨していて、SSL対応のページはSEOで有利になると言われています。
ここまで良いことずくめだと、SSLって、暗号化されて安全だし、Googleからの評価もあがるなら、みんなやればいいじゃん!って思いません??
しかし、みんながすぐにはできない理由があるんです。
それは、お金の問題。
利用するサービス
まず、今回お世話になりますサービスをご紹介します。
Let's Encrypt
今回の主人公はこちら。その名もLet's Encryptです。
これは、先ほど書いたとおりめちゃくちゃ高いSSL証明書を無料で発行してくれるすばらしいサービスです。
無料ですよ、無料!
Let's Encrypt の概要 - Let's Encrypt 総合ポータル
無料といっても、怪しいサービスではありません。体験版などでもありません。
こちらは、認証作業を完全に自動化することで運営されているもので、Firefoxでおなじみのmozillaなど、有名な団体が開発に携わっています。
自動で認証できるから費用も無料にできる、ということですね。
このサービスを使えば、簡単にSSL証明書が手に入ります。
本来、サーバーにて直接証明書の取得作業をするのですが、今回はWeb上で済ませるために、SSLBOXを通じて取得します。
FunHosting
次に利用するサービスはこちら。FunHostingです。
こちらは、今回レンタルサーバーとして利用します。
なぜ、こちらが選ばれたかと言いますと、無料でレンタルできて、SSLも利用させてくれるからです。
普通、無料のレンタルサーバーではSSLに非対応であったり、はたまた有料プランに入らないと使えなかったりと、なかなか良い条件のところがありません。
FunHostingならその心配は必要ありません。無料プランでも何の問題もなくSSL通信が可能です。太っ腹!
実は、byethost系のレンタルサーバーならどこでもいいのですが、その中でも今回は日本語表記されているこちらのサービスを利用します。
Freenom
こちらはご存じの方も多いはず。無料で独自ドメインが取得できる、Freenomです。
http://www.freenom.com/ja/index.html?lang=ja
.tl .ml .gaなど、5種類の独自ドメインが無料で取得できます。
SSL環境の構築
さて、サービスの紹介も終わったところで、本題に入りましょう。
ここからは、順序だてて説明してまいります。
①freenomで独自ドメインを取得する
まず始めに、独自ドメインの取得を行います。
ここで注意があります。この後FunHostingで登録していくわけですが、.tkのドメインは受け付けてくれません。おそらく、.tkは良くも悪くも有名で、スパムなんかに使われることも多いため、規制されているのだと思います。
.ml等のほか4種類は大丈夫ですので、この中から選ぶようにしましょう。
取得の手順は、こちらを参考にしてください。
ネームサーバーは、次に登録するFunHostingのものを先に登録しておきます。
ネームサーバーはns1.fun-hosting.tkとns2.fun-hosting.tkです。
②FunHostingに登録
つぎに、レンタルサーバーの契約へと参りましょう。
FunHostingのトップページ一番下にあります、新規会員登録にて必要事項を入力し、登録するをクリックします。
セキュリティコードで、0かoか分からないものがありますが、この場合は0を入力すればいいようです。私はここで何度かつまずきました。
確認ページにて確定を行うと、仮登録が完了します。
入力したメールアドレスに、URLが送付されますので、そちらをクリックして登録を確定します。
確定後は、アカウント名などか記されたメールが届きます。こちらは大切に保管しましょう。
③FunHostingに独自ドメインを登録
メールに書かれている管理画面URLより、会員ページにログインします。
ログイン後は、Addon domainsより独自ドメインを追加します。すでにネームサーバーの設定は終えていますから、new domain nameにドメイン名を入力すればおしまいです。
FunHostingのネームサーバーに登録されるまではかかり時間がかかるため、このまま放置しておきます。この間にファイルのアップロードなんかを済ませておいてもいいかもしれません。
ブラウザにて無事URLにアクセスできるようになれば、次へ進みましょう。
④レンタルサーバーのIPアドレスを確認
レンタルサーバーのIPアドレスを確認します。
本来このような手順は必要ないのですが、今回はこの作業が必須です。
なぜなら、この後FunHostingのネームサーバーからfreenomのネームサーバーへ変更しなければならないからです。
この理由はSSL証明書の発行あたりで説明しますね。今はとりあえずIPの確認を行います。
方法は簡単で、pingにて確認を行います。
Windowsの方はコマンドプロンプト、macやlinuxの方はターミナルからpingコマンドを実行します。
例えば、ping (あなたのURL)と打てばよいでしょう。
Webからpingを実行することもできます。
これにてIPアドレスが確認できますので、この値をメモしておきましょう。
⑤freenomにてネームサーバーを変更
さて、freenomに戻り設定を行います。
ログインし、会員ページのmy domainを選択します。
自分が取得したドメインが一覧で表示されますので、今回使用しているドメインのmanage domainを選択して、ドメインの管理画面へ移ります。
移動したらメニューの中にはmanagement toolsの項目の中に、nameserverがありますので、そちらを選択。
use custom nameserversが選択されていると思いますが、これをuse default nameserversに切り替えます。
これで、ネームサーバーの切り替えができました。
⑥DNSのレコードを編集
ネームサーバーを切り替えただけでは、サーバーにつながらなくなってしまいます。そこで、ネームサーバーの設定を行います。
メニューのmanage freenom DNSを選択すると、設定する項目が現れます。
ここで、先ほどのメモが役立ちます。
プルダウンからAを選択し、一番最後の欄にメモしたIPを入力します。
また最初の欄にwww、プルダウンからA、最後にメモしたIPを入力し、二つを登録します。
上の画像を参考にしてください。
入力したら、save changesを選択して確定します。
これで、ブラウザにてURLにアクセスできるようになりました。少し時間がかかりますので、アクセスできるようになりましたら、次に進みましょう。
⑦SSL証明書の取得
では、今回のメインであるSSLへの対応を行いましょう。
先ほど紹介しましたSSLBOXによって証明書を取得します。
こちらを参考に、会員登録を済ませてドメイン所有者確認の手前まで行って下さい。
無料のSSL証明書「Let's Encrypt」を取得できるSSL BOXの利用方法
今回は、ドメイン所有者の確認にて、DNS認証を行います。
普通はWeb認証でいいのですが、FunHostingでは何度やってもうまくいかなかったので、DNS認証を行います。
先ほど、わざわざFreenomのDNSに切り替えたのは、このDNS認証を行うためです。
これを行うためには、TXTレコードが設定できる必要がありますが、FunHostingでは設定できません。
ですから、FreenomのDNSに切り替えたわけです。
FreenomのDNSにてTXTレコードを設定するために、先ほど利用したFreenomの『Manage freenom DNS』画面を表示してください。
ここで、最初の欄に_ACME-CHALLENGE、プルダウンからTXT、最後の欄にSSLBOXに表示されている『内容』を記入します。
『Save changes』を選択したら、変更が反映されるまで5分程度待ってから、SSLBOXの『DNS認証』を選択して、『所有者確認開始』を選択します。
DNSレコードが反映されているかは、bashまたはコマンドプロンプトで、
nslookup type=TXT acme-challenge.(あなたのドメイン名)
にて、『内容』と同じものが表示されるかで確認を行うことができます。
変更後すぐに所有者確認をおこなうと、確認に失敗してしまいます。失敗した際は、TXTレコードの『内容』を変更し、再度認証を行います。
確認ができたら、SSL証明書が発行されます。この画面を表示させたまま、つぎの手順に移りましょう。
⑧FunHostingにSSL証明書を登録
FunHostingの管理画面にログインしましょう。メニューの中に、『SSL/TLS』の項目がありますので、これを選択します。
SSL通信をしようとしているドメインの『Configure』を選択すると、証明書(文字列)を送信するページが表示されます。
『Private Key』にSSLBOXの『秘密鍵』を、『CSR』にSSLBOXの『中間証明書』を入力し、Upload Keyを選択します。
変更が反映されれば、次に『Certificate』にSSLBOXの『CERT(SSL証明書)』を入力し、『Upload Certificate』を選択して、変更を反映させます。
これで、SSL通信の設定は完了です。https://~でURLにアクセスすれば、ちゃんと通信できると思います。
エラーで有効なSSL証明書でないと表示される場合があります、証明書はサーバーに反映されるまで時間がかかるようで、タイミング次第では、サーバーに元から備わっているSSL証明書もどき(オレオレ証明書)が送信されるため、エラーが表示されるようです。
この場合は、少し待ってから再度アクセスしてください。
⑨常にSSLで通信されるようにする
最後に、http://~でアクセスしたとき、自動的にhttps://~でアクセスされるようにします。
FTPでサーバーにアクセスして、ドメインのルートフォルダ(ドメイン名-htdocsの中)に.htaccessという名前でファイルを作成し、以下の通り記述します。
RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !=https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
標準的な書き方と異なりますが、これ以外の書き方だとリダイレクトループが発生して大変なことになりました。
まとめ
かなり長くなりましたね。いかがでしたでしょうか。
この方法で、SSL通信が可能です。私も無事設定ができました。
しかし、この方法ではなぜかネームサーバーの調子が悪く、接続できない時が多々ありました。
調査を進めると、FunHosting標準のネームサーバーを使用していないと不安定になるようです。詳しい原因はわかりませんが、DNS認証が終われば、FunHostingのネームサーバーに変更する方がいいでしょう。数か月ごとに認証しなければなりませんから、少々手間ですが…。
Let's Encryptは素晴らしいサービスですが、個人向けのサービスだと思います。企業でLet's Encryptを使っているところはあまり見かけませんし、信用度としてどうなんだ、という意見もあります。
顧客のデータを扱うようなサイトでは、有料のSSL証明書を購入した方がいいのかもしれません。
ということで、今回はSSLについて書きました。
では、また。