たけぼーの備忘録

暇を持て余した人間の無意味なブログ

無料の独自ドメインでお金をかけずに常時SSL環境を整える

こんにちは、たけぼーです。
今日は、お金を一切かけずに常時SSL環境の構築を目指してみましょう。

SSLとは

SSLとは、webを暗号化しながら通信を行う技術で、URLの先頭がhttps://~で始まります。
例えば、Amazonなんかのショッピングサイトやgoogleなど、様々なサイトで活躍する技術です。
これによって、個人情報とかパスワードとか、誰かに盗まれる危険性が低くなるわけです。

google chromeでは、入力フォームがあるページがSSLに対応していなければ、『保護されていません』と表示するようになり、少し話題になりましたよね。

特に、Google常時SSLを推奨していて、SSL対応のページはSEOで有利になると言われています。

ここまで良いことずくめだと、SSLって、暗号化されて安全だし、Googleからの評価もあがるなら、みんなやればいいじゃん!って思いません??

しかし、みんながすぐにはできない理由があるんです。
それは、お金の問題

結構高いSSL証明書

SSLに必要なSSL証明書というものがあるのですが、これがものすごく高い。
1年でだいだい3万円、高いものだと10万円します。

びっくりしません!?高すぎません!?

こんなに高いと、趣味でちょっとやってみようかな、なんてできませんよ。
企業ならお金を払っても良いかもしれませんが、個人ではちょっと痛手すぎる…

こんな理由で、常時SSLはなかなかハードルが高いわけです。

しかし!タイトル通り、今回は一切お金をかけない方法があるんです。

利用するサービス

まず、今回お世話になりますサービスをご紹介します。

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.tkns2.fun-hosting.tkです。

②FunHostingに登録

つぎに、レンタルサーバーの契約へと参りましょう。

FunHostingのトップページ一番下にあります、新規会員登録にて必要事項を入力し、登録するをクリックします。
f:id:takebo_blog:20170516102209p:plain
セキュリティコードで、0かoか分からないものがありますが、この場合は0を入力すればいいようです。私はここで何度かつまずきました。

確認ページにて確定を行うと、仮登録が完了します。f:id:takebo_blog:20170516102552p:plain

入力したメールアドレスに、URLが送付されますので、そちらをクリックして登録を確定します。
確定後は、アカウント名などか記されたメールが届きます。こちらは大切に保管しましょう。

③FunHostingに独自ドメインを登録

メールに書かれている管理画面URLより、会員ページにログインします。

ログイン後は、Addon domainsより独自ドメインを追加します。f:id:takebo_blog:20170516111143p:plainf:id:takebo_blog:20170516111416p:plainすでにネームサーバーの設定は終えていますから、new domain nameにドメイン名を入力すればおしまいです。

FunHostingのネームサーバーに登録されるまではかかり時間がかかるため、このまま放置しておきます。この間にファイルのアップロードなんかを済ませておいてもいいかもしれません。

ブラウザにて無事URLにアクセスできるようになれば、次へ進みましょう。

レンタルサーバーIPアドレスを確認

レンタルサーバーIPアドレスを確認します。
本来このような手順は必要ないのですが、今回はこの作業が必須です。
なぜなら、この後FunHostingのネームサーバーからfreenomのネームサーバーへ変更しなければならないからです。

この理由はSSL証明書の発行あたりで説明しますね。今はとりあえずIPの確認を行います。

方法は簡単で、pingにて確認を行います。

Windowsの方はコマンドプロンプトmaclinuxの方はターミナルからpingコマンドを実行します。

例えば、ping (あなたのURL)と打てばよいでしょう。

Webからpingを実行することもできます。

f:id:takebo_blog:20170516112543p:plain

これにてIPアドレスが確認できますので、この値をメモしておきましょう。

⑤freenomにてネームサーバーを変更

さて、freenomに戻り設定を行います。
ログインし、会員ページのmy domainを選択します。f:id:takebo_blog:20170516113348p:plain

自分が取得したドメインが一覧で表示されますので、今回使用しているドメインのmanage domainを選択して、ドメインの管理画面へ移ります。f:id:takebo_blog:20170516113357p:plain

移動したらメニューの中にはmanagement toolsの項目の中に、nameserverがありますので、そちらを選択。
f:id:takebo_blog:20170516113402p:plain

use custom nameserversが選択されていると思いますが、これをuse default nameserversに切り替えます。f:id:takebo_blog:20170516113406p:plain


これで、ネームサーバーの切り替えができました。

DNSのレコードを編集

ネームサーバーを切り替えただけでは、サーバーにつながらなくなってしまいます。そこで、ネームサーバーの設定を行います。f:id:takebo_blog:20170516114000p:plain
メニューのmanage freenom DNSを選択すると、設定する項目が現れます。
f:id:takebo_blog:20170516114411p:plain

ここで、先ほどのメモが役立ちます。

プルダウンから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について書きました。
では、また。