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日以降に取得した証明書はこのようにブロックされてしまいます。