Let’s EncryptでサイトをSSL化する流れ

SSLの導入というと少し前までは証明書がなかなかお安い値段ではないこともあって敷居がやや高く、主に個人情報等を取り扱うWEBサービスやECサイト、大手のWEBサイトで導入されるのが大半だったと思います。
しかしLet’s Encryptの登場で、ドメインとroot権限のあるサーバー(VPSなど)を持っていれば誰でも無料でSSL証明書を取得してサイトに適用することができるようになりました。
このサイトもLet’s Encryptで発行した証明書を使ってSSL化していますので、その際の手順をざっくりと紹介したいと思います。

そもそもなんでSSLに

GoogleがSSLに対応したサイトをSEOで優遇すると以前から明言してきていますので、SSL化に興味はありましたが、元々個人サイトに対してわざわざやる程じゃないなと考えていました。
ただ、このサイトとサーバー以外にも、ownCloudを設置してクラウドストレージとして使ってるサーバーとドメインを他に持っていまして、流石にコイツだけはSSLにしていました。
しかしその際はひとまず暗号化だけできれば良いということで、認証局を使わない自己発行証明書、いわゆるオレオレ証明書というやつを作ってそれでSSLにしていたというわけです。
ただこの自己発行証明書がなかなか曲者で、発行と設置がぶっちゃけそんなに楽でもなくめんどい、ブラウザでアクセスするたびに信頼できない証明書として警告を受ける、環境によってはアクセスすらできない、アドレスバーに赤い斜線がついたりして気分良くない、と一応使えるけどなんかあんまり……な有様でした。

そこでLet’s Encryptなワケよ

Let’s Encryptは4月に正式リリースしたばかりの新しいサービスですが、ちゃんとした正規の認証局ですので現行のブラウザではほぼすべて信頼されていますし、証明書取得も専用のクライアントを実行するだけです。
サーバーがApacheを使用している場合、ヴァーチャルホストへの証明書適用まで自動でやってくれます。(Nginxは手動で設定するかプラグインが必要)
そしてなにより無料。
ただし簡単に取得できるので仕方ないのですが、証明書の有効期間は3ヶ月と短く、同一ドメインに対して短期間に何度も証明書を取得しようとすると制限を食らってしまいます。
証明書の期限に関してはクライアントのコマンドでこれもまた簡単に更新できますので、cronに登録して自動化しておけば問題にはなりません。
取得枚数制限に関しても悪用防止は必要ですし、普通に使っていれば制限にはそうそう達しませんので問題は無いかと思います。

実際の証明書取得のざっくりした流れ

無料SSLサーバ証明書「Let's Encrypt」の総合ポータルサイト。導入方法の解説や技術情報の和訳など。

詳しくはこちらの総合ポータルにありますが、おおよその流れについてここでも書きたいと思います。
まず取得の前に必要となるのが、自前のドメイン、root権限のあるUNIX/Linux系サーバーになります。
要するにレンタルとか共用サーバーを使用してる場合はムリということです
レンタルを使用していてサーバーの設定とかがわからない場合レンタルサーバーが提供しているSSLがあったりすることも多いので、そちらを使うのがよいでしょう。

次に事前準備として使用するドメインのAレコードに手持ちのサーバーのIPアドレスを設定し、サーバー側では80と443ポートを開けておく必要があります。
そしてクライアントのダウンロード。gitを使いますのでない場合はインストールして次のコマンドを入力し、公式のクライアントをダウンロードします。

$ git clone https://github.com/certbot/certbot

次にダウンロードしたディレクトリに移動し、その中にあるcertbotのクライアントを実行します。

$ cd certbot/
$ sudo ./certbot-auto

この時aptやyumで動作に必要なパッケージがインストールされますので、root権限が必要になります。
また、WEBサーバーが80と443をlistenしている場合、証明書取得時にエラーが出ますので事前にApacheやNginxは停止しておいて下さい。
パッケージが無事導入できればこのまま証明書の取得に移行します。
Apacheにヴァーチャルホストが設定されている場合ここで証明書取得するドメインをリストから選択ができます。
ヴァーチャルホストを設定していない、又はそれ以外のドメインの取得をしたい場合はドメイン名を直接入力することになります。
ドメイン名の他に規約への同意とメールアドレスが求められますので入力しますが、この時のメールアドレスは万一証明書を紛失してしまった場合の再発行に使いますので、適当な捨てアドなんかはやめときましょう。
Apacheを使用していてクライアントにプラグインがある場合はサーバーの設定もこの時自動でやってくれます。
secureとeasyが選べると思いますが、easyの場合はhttpとhttpsの両方でアクセスできるようになります。
secureを選択した場合、httpでアクセスしてきたものをrewriteを使用してhttpsに301リダイレクトします。
基本的には後者で問題ないと思いますが、動作確認をしたい場合などはeasyにしておいて後でrewriteを追加すればそれでいいと思います。

取得した証明書と鍵は/etc/letsencrypt/archive/[ドメイン名]/に実体が保存されており、/etc/letsencrypt/live/[ドメイン名]/に最新のものへのシンボリックリンクが作成されています。
サーバーへ設定する際用いるパスはlive以下のものを基本的に使用します。期限での更新や再取得した場合、新しいものへとリンク先が張り替えられますので、こうしておけばサーバー側での再設定などは必要なくなります。

各種サーバーへの詳細な設定はここでは割愛しますが、サーバーへのSSL証明書の適用までできたらサーバーを起動して完了でございます。
48523ba69e46ebab042ce5e2990734a6
せっかくなので超適当なサブドメインを発行して、こことは別のサーバーに証明書を入れてみましたが実に一瞬です。
サーバーの基本さえわかるならば簡単ですし、何よりSSLの導入は今後個人サイトでも重要視されてくるのではないかと思います。
運営中のサイトへSSL導入をどうしようか……という人にはLet’s Encryptでの取得は今まさにおすすめです。

スポンサーリンク