WebサイトのHTTPS対応が推奨されている昨今、無償かつ自動でSSL(TLS)証明書の発行や更新ができる「Let's Encrypt」が注目を集めている。Web系エンジニアを主な対象として、その仕組みやメリット、デメリットを解説。
「Let's Encrypt」とは、SSL(TLS)に利用できるサーバ証明書を無償で発行している認証局またはサービスのこと。2016年4月から正式なサービスを開始した。MozillaやAkamai、Cisco Systemsなどが支援しているISRG(Internet Security Research Group)という団体が運営している。ソフトウェアツールによって証明書の更新などの作業を自動化できる点も特長として挙げられる。
現在、プライバシー保護やセキュリティ強化の一環として、クライアントとWebサイトやメールサーバとの通信の暗号化が強く推奨されている。たとえ個人情報のような秘匿すべき情報を持たないWebサイトでも、改ざん防止といった理由から通信路の暗号化が求められるようになってきた。
そのための技術は、SSL(TLS)で既に確立されている。だが実際には、少なくとも次の2つの問題がSSLの普及を妨げている。
1つは、SSLの実装に必須のサーバ証明書を発行したり更新したりするのに費用が掛かることだ。安価なものでも、1枚で1年当たり1000円〜2000円ぐらいは掛かる。
もう1つは、SSLを実装するのに手間が掛かることだ。まず証明書の発行やWebサーバへの設定といった作業が必要になる。また証明書の「更新」も厄介である。証明書には通常、期限があり、数カ月あるいは数年ごとに更新が求められる。その際、証明書を発行してくれる会社との間で、CSR(Certificate Signing Request:証明書署名要求)を送信したり、メールで証明書を受け取ったり、費用を決済したり、といった手動でのやりとりが強いられる。
どちらの問題も、サイト数やドメイン数が多くなるにつれてコストと手間が増大してしまう。
Let's Encryptは、こうした問題を解消することで、SSLによる通信路の暗号化を普及させることを目的としている。
まず費用の問題については、スポンサー企業の支援などによって、証明書の発行や更新、失効といったサービスを、全て無償で提供している。証明書を発行する認証局も自ら運営している。
手間の問題については、ソフトウェアツールによる自動化で解決しようとしている。具体的には、
といった処理をWebサイト管理者が手動で実施する代わりに、専用のクライアント(エージェント)プログラムで自動的に処理させる。
認証局はサーバ証明書を発行する際、その要求元(Webサイト管理者あるいはWebサーバ)が対象のドメインを管理(あるいは支配)できることを、事前に確認(認証)する必要がある(前述の「認証局によるWebサイトとドメインの認証」に該当)。これが正しく実行されないと、対象のドメインに関する権限を何ら持たない何者かが正当な証明書を取得して、なりすましなどに悪用できてしまう恐れがあるからだ。
Let's Encryptでは、この最初の認証を次のような仕組みで自動化している。
この認証がいったん完了すると、以後は手動操作なしで、以下のように証明書の発行ができるようになる。
こうしたクライアントプログラムと認証局とのやりとりには、ACME(Automatic Certificate Management Environment)と呼ばれる通信プロトコルが利用される。
以上のような仕組みや仕様にのっとって、Webサーバでの証明書の処理を自動実行するためのクライアント(エージェント)プログラムが多数提供されている。まず、LinuxやmacOS、BSD系のディストリビューションといったUNIX系OSでは、Let's Encrypt推奨の「certbot」が利用できる。
Windowsについてはサードパーティー製ツールが幾つか提供されている。
無償のサーバ証明書と聞くと、自己署名証明書(いわゆるオレオレ証明書)を思い浮かべるかもしれない。
だがLet's Encryptが発行する証明書はそれと全く異なり、以前からある有償の証明書発行サービスと同じく、公的で正規の認証局と信頼の連鎖が結ばれている。
また上記画面にある「DST Root CA X3」というルート証明書は、現在利用できる多くのコンピュータにプリインストールされている(詳細はすぐ下のリンク先ページを参照)。そのため、このサーバ証明書を組み込んだWebサイトに対し、訪問するエンドユーザーは何ら特別な操作をすることなく、HTTPS経由でWebページを閲覧できる。
Let's Encryptでは、1枚で複数のドメインを証明できるSAN(Subject Alternative Names)対応の証明書も発行できる。
Let's Encryptによって発行された証明書は、Webサーバの他に、メールサーバ間のメッセージ配送やメーラとメールサーバ間の通信をSSLで暗号化する場合にも利用できる。ただし、証明書の自動更新には対応していないことがまだ多いようだ。
いいことずくめに思えるLet's Encryptだが、できないことや対応していないこともある。
まず、組織認証型の証明書やEV証明書は発行しておらず、ドメイン認証型の証明書のみ対応している(これらの区別は「実践! SSL証明書の買い方・選び方」を参照)。つまりドメイン自体は証明しても、その運営者までは証明してくれない。
また、今のところワイルドカード証明書も発行していない。ワイルドカード証明書は、例えば「*.example.jp」に合致するような不特定のサブドメインを証明できる(異なる階層のサブドメインは不可)。その大きなメリットは、証明書の枚数を減らしてコストを下げ、かつ更新時の手間を少なくできることだ。その点では、無償で自動更新の可能なLet's Encryptなら、前述のSAN対応の証明書で代替しやすいはずだ。
Let's Encryptの証明書の有効期間は90日(約3カ月)固定であり、もっと長い1年間あるいは3年間などには指定できない。そのため、更新作業の自動化は必須といえよう(これはLet's Encrypt側が狙っていることでもある)。ただし、それには前述のようなコマンドラインコマンドあるいはスクリプトのセットアップと実行が必要となる。
その他、レンタルサーバのようにユーザーが管理者権限を取得できないマネージドサービスでは、次の例のようにサーバ運営側がLet's Encryptに明示的に対応する必要がある。
執筆時点では、Let's Encryptにより、HTTPS化が誰でも簡単にできるというレベルにはまだ至っていない。それでも「無償」というインパクトは大きい。また自動化のためのソフトウェアツールも改良が続けられており、将来性は大いにある。もしエンジニアとしてWebサイトの設計や構築、運用に関わるなら、Let's Encryptの動向は注目した方がよいだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.