Let’s Encrypt 「SSL/TLSサーバ証明書」を無料で発行してインストールと更新プロセスを自動化 Rails編

StartSSLを運営するStartCom認証局より、証明書が期限切れになりますので、新しい証明書を取得するようにとメールが届きました。StartSSLでSSL/TLSサーバ証明書を取得したのが昨年12月でもうすぐ1年が経過する時期となっていました。

期限切れになる前に更新しなければなりませんが、今回はStartSSLの更新は行わずに、Let’s Encryptに乗り換えることにしました。

その理由は、「WoSign と StartCom という 2 つの認証局 (CA) における様々な「技術上および経営上の問題」を発見した」というMozillaの発表に続き、Appleからも「Apple 製品では、WoSign および StartCom のルート CA が発行した証明書について、「Not Before」の日付が「1 Dec 2016 00:00:00 GMT/UTC」以降のものはブロックします。」ということで、事実上StartSSLは使用できなくなるからです。

Let’s Encryptとは

DV 証明書発行の自動化が可能であり、無料で利用することができる、というものです。
2016年4月から正式サービスが開始されています。

EV証明書 OV証明書 DV証明書
より厳密に組織の実在を確認する 企業認証型
組織の実在を確認する
ドメイン認証型
ドメインの所有を確認する
× × Let’s Encrypt

Let’s EncryptについてはこちらのLet’s Encrypt 総合ポータルに詳しく解説されています。

Let’s Encrypt は、認証局(CA)として「SSL/TLSサーバ証明書」を無料で発行するとともに、証明書の発行・インストール・更新のプロセスを自動化することにより、TLS や HTTPS(TLSプロトコルによって提供されるセキュアな接続の上でのHTTP通信)を普及させることを目的としているプロジェクトです。

Let’s Encrypt クライアントのインストール

前提条件
CentOS release 6.5 (Final)
Apache/2.2.15
openssl、mod_ssl インストール済み

Let’s Encrypt 認証局と会話するクライアントプログラムはCertbotです。
まずCerbotサイトを開き、OSと使用するWebサーバーを選択すると、インストール手順が表示されますので、この手順に従います。

cd /usr/local/bin
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

以下のコマンドでクライアントプログラムが依存するパッケージを更新します。

./certbot-auto

クライアントプログラムに必要なパッケージ更新が実行された後に、テキストユーザインタフェース画面が表示されて、ドメインの選択が要求されます。

Which names would you like to activate HTTPS for?
  [*] aaa.bbb.com
  [*] xxx.yyy.com
      < OK >    < Cancel >

ここで<OK>を選択してしまうと、Webサービスが停止し、certbot用サービスが立ち上がり、証明書発行プロセスが実行されてしまいますので、<Cancel>を選択します。

Certbot プログラムの実行

証明書発行プロセス中にWebサーバーを停止したくない場合はプラグインのwebrootを使用します。以下のコマンドを入力します。

./certbot-auto certonly --webroot -w /var/www/html/fileshelfplus/public/ -d fileshelfplus.com -m aaa@bbb.com --agree-tos

certonly –webroot    Webrootプラグインを使用して、ウェブサーバを停止することなく SSL/TLS 証明書を発行する。
-w    Webサーバのドキュメントルートディレクトリを指定、railsの場合DocumentRootはpublicディレクトリですね
-d    証明書の発行先のドメイン名を指定
-m    メールアドレスを指定、トラブル時の連絡用、お知らせメール用
–agree-tos    Let’s Encrypt の利用規約に同意

証明書発行プロセスが成功すると以下が表示されます。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
 /etc/letsencrypt/live/fileshelfplus.com/fullchain.pem. Your cert
 will expire on 2017-03-04. To obtain a new or tweaked version of
 this certificate in the future, simply run certbot-auto again. To
 non-interactively renew *all* of your certificates, run
 "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:
発行された証明書が保存された場所

Certbot プログラムから教えられた場所はシンボリックリンクが作成されています。
公開鍵(サーバ証明書)は /etc/letsencrypt/live/ドメイン名/cert.pem
秘密鍵は /etc/letsencrypt/live/ドメイン名/privkey.pem
サーバ証明書+中間証明書が結合されたファイルは /etc/letsencrypt/live/ドメイン名/fullchain.pem
中間証明書は /etc/letsencrypt/live/ドメイン名/chain.pem

SSL証明書の入れ替え

vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/letsencrypt/live/ドメイン名/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン名/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/ドメイン名/fullchain.pem
SSLCACertificateFile /etc/letsencrypt/live/ドメイン名/chain.pem

Apache を再起動

sudo service httpd restart

ブラウザから証明書を表示してみます。

SSLのセキュリティ評価を見てみましょう。
https://www.ssllabs.com/ssltest/

レベルAですね。レベルA+にするにはApacheのバージョンアップや常時SSLが必要かもしれません。

SSL証明書の更新

さて、Let’s Encryptの証明書の有効期限は90日間です。3ヶ月毎に更新する必要があるのです。
更新コマンドは

./certbot-auto renew

更新の動作確認をシミュレーションするコマンドは

./certbot-auto renew --dry-run

有効期限が残り30日を切ると更新処理が実行可能となります。
クーロンに仕掛けておくことで、更新処理が自動化できます。

Let’s Encryptの導入はStartSSLよりシンプルなのではないでしょうか。また、ドメインがある限りSSL証明書更新を自動化できますので、ドメインを大量に管理している場合はメリットが大いにあります。

StartSSLの更新は行わないことにしていましたが

StartSSLを更新してみました。今のところWindowsのChromeやFireFoxでは問題ありませんが、iOSのブラウザでは、2016年12月1日以降に取得した証明書はこのようにブロックされてしまいます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする