こんにちは。エンジニアの西脇(@yasuhiro1711)です。今日はニュースであふれているSSL、HTTPS周りのお話を書きます。
Google検索でhttpsサイトが優先的にインデックス!
先日Google ウェブマスター向け公式ブログにて、検索エンジンによるインデックスがHTTPSサイトを優先して登録をするとアナウンスがありました。
Google ウェブマスター向け公式ブログ: HTTPS ページが優先的にインデックスに登録されるようになります
これは、今後のSSL化への流れの中で大きな変化となりそうです。一気に小企業サイトや個人ブログなどでSSL化が進むでしょう。SEO界では大きな変化です。しかし、SSL化する時の悩みといえばSSL証明書のコストです。特に個人の場合、SSL証明書にまでコストをかけるのは、、、という声もありそうです。
そこで今日はそんな悩みを将来解決するかもしれない取り組みで、SSL証明書を無料で発行できる「Let’s Encrypt」を利用してサイトをSSL化してみたいと思います。
Let’s Encrypt とは何か?
Let’s Encryptとは、無料で自動化された、オープンなCA局で、Internet Security Research Group (ISRG)が主導で進めているものです。このオープンCA局では、SSL証明書の発行を無料で、自動に、利用することができます。運営は、AkamaiやciscoやMozillaの専門家を始め、Facebookもスポンサーについています。そして、先日までクローズドだったLet’s Encryptが、12/3にPublic Beta版となり誰でも利用することが可能となりました。おめでとうございます!
Let’s Encrypt でSSL証明書を発行、設置してWEBサーバに設置する
Let’s Encryptは現在、様々なウェブサーバーのプラグインに対応しています。apache、standalone、webroot、manual、nginxなどが代表的なプラグインです。これを利用して証明書の取得からインストールまでが簡単に可能となっています。
今回は、プラグイン整備が進んでいるUbuntu14のApacheでテストしてみます。
Let’s Encrypt クライアントのインストール
※ 以下を実行すると、レポジトリ登録とパッケージがインストール・アップデートが自動で行われてしまいます。これは、既存環境だと非常に危険ではあるので、注意が必要です。
※ CentOS6の場合は、EPELレポジトリの登録が事前に必要です。
クライアントインストールは以下のコマンドで進めます。
$ git clone https://github.com/letsencrypt/letsencrypt $ cd letsencrypt $ ./letsencrypt-auto --help
以下のようなhelp内容が表示されれば完了です。
The Let's Encrypt agent can obtain and install HTTPS/TLS/SSL certificates. By default, it will attempt to use a webserver both for obtaining and installing the cert. Major SUBCOMMANDS are: (default) run Obtain & install a cert in your current webserver certonly Obtain cert, but do not install it (aka "auth") install Install a previously obtained cert in a server revoke Revoke a previously obtained certificate rollback Rollback server configuration changes made during install config_changes Show changes made to server config during installation plugins Display information about installed plugins Choice of server plugins for obtaining and installing cert: --apache Use the Apache plugin for authentication & installation --standalone Run a standalone webserver for authentication (nginx support is experimental, buggy, and not installed by default) --webroot Place files in a server's webroot folder for authentication OR use different plugins to obtain (authenticate) the cert and then install it: --authenticator standalone --installer apache More detailed help: -h, --help [topic] print this message, or detailed help on a topic; the available topics are: all, automation, paths, security, testing, or any of the subcommands or plugins (certonly, install, nginx, apache, standalone, webroot, etc)
Let’s Encrypt クライアントの使い方
プラグインを利用することでとても簡単に操作ができます。今回は、Debian環境(Ubuntsu)のApache2.4で利用すべく、–apacheというプラグインを使います。以下のコマンド一発です。
./letsencrypt-auto --apache
もちろん、DNSを作業サーバに向けておかないとこの先進まないので注意してください。
コマンドを実行すると、以下のようにTUIが立ち上がります。
今回は、サーバネームも登録していなかったので、入力を促されます。
続いて、利用したいドメインを聞かれます。
サービスへの同意を求められます。
オプションでhttpsだけにするのか聞かれます。
最終的に以下のような出力で完了すれば、証明書の登録と設定が完了しています。
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/aaa.xxxxxx.net/fullchain.pem. Your cert will expire on 2016-03-17. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - If you like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
簡単すぎてびっくりしてしまいます。
ブラウザで確認
早速ブラウザから確認をしてみると、httpsで通ることが確認できますね。すごいです。しかし鍵マークが不十分になっていることがわかると思います。せっかく SSLになっているのに残念です。
詳細をみると、「このウェブサイトの識別情報が Let’s Encrypt Authority X1 によって確認されました。証明書の透明性に関する情報がサーバーから提供されませんでした。」となっています。
これは証明書がCT技術(Certificate Transparency)に対応していないためです。
調べてみると、Let’s Encryptのapacheプラグインの場合、まだCT機能までが盛り込まれていないようです。
参考:https://community.letsencrypt.org/t/will-you-support-certificate-transparency/222/4
Nginxの場合はnginx-ctを利用して、ソースインストールしたNginxにLet’s Encryptの –nginxプラグインを利用することで、簡単にCT導入もできる模様です。今すぐ、Let’s Encryptの証明書を利用してサイト運営するなら、このパターンでしょう。
今後のリリースに大いに期待です。
SSL証明書は90日間有効
Let’s Encryptの仕組みで、Let’s Encrypt発行のSSL証明書は90日間有効です。90日で期限が切れるので、その前にアップデートしなければいけません。90日と聞くと「短い!」「無料だからか?」と思うかもしれませんがそうではありません。webの世界で90日は新しい考え方ではなく、TLSトランザクションの約29%はこの周期となっています。これは、キーの流出やセキュリティ不具合などでアンセキュアな状態を作り出さないためとしています。
90日という周期なら、なおさらシンプルに自動でアップデートできるようにしておきたいものです。今でもLet’s Encryptにはシンプルにアップデートする仕組みがありますが、今後さらに簡素化されていくのだと思われます。
参考:Why ninety-day lifetimes for certificates? – Let’s Encrypt – Free SSL/TLS Certificates
まとめ
Let’s Encryptは簡単すぎてしまいびっくりしました。ただし、プラグイン開発はまだこれからなので、個人ブログ運営者など非エンジニアの方が導入するにはまだ難しい現状ですね。されどLet’s Encryptの今後がとても楽しみです。オープンで自由でセキュアなSSLの世界が早く実現して欲しいですね。