Let's Encryptを導入してみました

少し間が空いてしまいましたが、第二弾ということで記事を書かせて頂くことになりました。
株式会社あゆたで開発をしております(主にiOS/Android)、大塚と申します。

今回は自社のAWS環境にLet's Encryptを導入した手順について、簡単にですが紹介したいと思います。

Let's Encryptとは

聞いたことがある方も多いと思いますが、Let's Encryptとは無料で使えるSSL/TLS証明書の発行サービスで、2015年12月4日から公開βが始まっています。

運営元はISRG(Internet Security Research Group)という非営利団体になっており、シスコ/Akamai/電子フロンティア財団/モジラ財団などの大手がスポンサーとして名を連ねています。(安心ですね)

さて、Let's Encryptの特徴をざっくりまとめてみると…

  • (独自ドメインを持っていれば)誰でも無料でSSL/TLSサーバ証明書を発行できる。
  • 証明書の発行/インストール/更新などの手順を自動化できる。
  • TLSやHTTPSを普及させることを目的としている。

無料といったことで注目されていますが、普及が目的なんですね。

また発行できる証明書はドメイン認証(DV)SSL/TLS証明書のみになります。
企業認証(OV)やEV認証が必要な方は、有償で他の認証局や代理店から購入する必要があります。

より詳しい情報は公式のページを参照して下さい。
https://letsencrypt.org/

導入手順

では、ここから実際にLet's Encryptを導入した手順をご紹介します。

1. ダウンロード&インストール

まずはgithubからLet's Encryptのクライアントを持ってきます。

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

cloneが完了したら、下記のコマンドを打ってセットアップ。
ヘルプが正常に出力できていればインストールはOKです。

$ cd letsencrypt/
$ ./letsencrypt-auto --help
2. SSL/TLSサーバ証明書の取得

いよいよ証明書取得のため、まずはLet's Encryptクライアントを起動します。

$ ./letsencrypt-auto certonly -a standalone \
-d <domain_name>

domain_nameの箇所には取得しているドメイン名を入れます。

クライアントの起動が完了すると画面がCLIからTUIに切り替わり、質問に答えていく形式になります。

2.1 メールアドレスの入力

alt 「Enter email address」という入力欄が表示されるので、メールアドレスを入力します。
このメールアドレスは緊急時の連絡や、鍵紛失時の復旧に使われるそうです。

2.2 利用規約への同意

alt 利用規約への同意画面が表示されます。
利用規約を確認して問題なければ同意します。

2.3 ドメイン名の入力

alt -dオプションでドメインを指定していなかった場合、ドメインを指定する画面が表示されます。

2.4 Webサーバの一時停止

alt webサーバが稼働している場合に表示されることがあります。
一旦CLIに戻るので、サーバを停止後にまたLet's Encryptクライアントを起動し直して下さい。
Let's Encryptはサーバ確認の際に80portを利用するため、停止しておく必要があるようです。

2.5 SSL/TLS サーバ証明書の取得完了

証明書の取得に成功すると、画面がTUIからCLIに戻ります。
取得された証明書は下記の場所に保存されています。

/etc/letsencrypt/archive/<domain_name>/
├ certN.pem サーバ証明書(公開鍵)
├ chainN.pem 中間証明書
├ fullchainN.pem サーバ証明書と中間証明書が結合されたファイル  
└ privkeyN.pem 秘密鍵  

また、シンボリックリンクも作成されています。
先ほどのファイルは更新の度にNの箇所がインクリメントされていくので、設定ファイルなどで指定するにはこちらを使うのが良さそうです。

/etc/letsencrypt/live/<domain_name>/
├ cert.pem サーバ証明書(公開鍵)
├ chain.pem 中間証明書
├ fullchain.pem サーバ証明書と中間証明書が結合されたファイル  
└ privkey.pem 秘密鍵  
3. 完了

以上で証明書の取得は完了です! お疲れ様でした。

あとはApacheやnginxなどの設定ファイルから証明書を指定してあげると、SSL/TLS対応のサイトが出来るはずです。

ちなみにこのサイトもLet's Encryptを使用しています。

注意点

最後に注意すべき点を挙げておきます。

  • 商用サイトでの利用は公開βの終了後が推奨されるようです。
  • 証明証の期限は90日です。都度更新が必要になるため、cronなどで更新のコマンドを自動化しておくと良いでしょう。