Loading
連載
» 2016年06月02日 05時00分 UPDATE

Tech Basics/Keyword:無償かつ自動でSSL(TLS)証明書を発行できる「Let's Encrypt」とは?

WebサイトのHTTPS対応が推奨されている昨今、無償かつ自動でSSL(TLS)証明書の発行や更新ができる「Let's Encrypt」が注目を集めている。Web系エンジニアを対象に、その仕組みやメリット、デメリットを解説。

[島田広道,デジタルアドバンテージ]
Tech Basics/Keyword
Windows Server Insider


「Tech Basics/Keyword」のインデックス

連載目次

 「Let's Encrypt」とは、SSL(TLS)に利用できるサーバ証明書を無償で発行している認証局またはサービスのこと。2016年4月から正式なサービスを開始した。MozillaやAkamai、Cisco Systemsなどが支援しているISRG(Internet Security Research Group)という団体が運営している。ソフトウェアツールによって証明書の更新などの作業を自動化できる点が特長として挙げられる。

Let's EncryptのWebサイト Let's EncryptのWebサイト

SSLの普及を妨げている2つの要因

 現在、プライバシー保護やセキュリティ強化の一環として、クライアントとWebサイトやメールサーバとの通信の暗号化が強く推奨されている。たとえ個人情報のような秘匿すべき情報を持たないWebサイトでも、改ざん防止といった理由から通信路の暗号化が求められるようになってきた。

 そのための技術は、SSL(TLS)で既に確立している。だが実際には、少なくとも次の2つの問題がSSLの普及を妨げている。

 1つは、SSLの実装に必須のサーバ証明書を発行したり更新したりするのに費用が掛かることだ。安価なものでも、1枚で1年あたり1000円〜2000円ぐらいは掛かる。他のサイト運営コストに比べれば安いとはいえ、ドメインの個数が多くなるにつれて無視できない金額に積み上がってしまう。

 もう1つは、SSLを実装するのに手間がかかることだ。まずWebサーバの設定変更や証明書の発行といった作業が必要になる。また証明書の「更新」も厄介である。証明書には通常、期限があり、数カ月あるいは数年ごとに更新が求められる。その際、証明書を発行してくれる会社との間で、CSR(Certificate Signing Request:証明書署名要求)を送信したり、メールで証明書を受け取ったり、費用を決済したり、といった手動でのやりとりが強いられる。これもサイト数やドメイン数に応じて増大してしまう。

Let's Encryptの目的と仕組み

 Let's Encryptは、こうした問題を解消することで、SSLによる通信路の暗号化を普及させることを目的としている。

 まず費用の問題については、前述した大手企業の支援などによって、証明書の発行や更新、失効といったサービスを、全て無償で提供している。証明書を発行する認証局も自ら運営している。

 もう1つ、証明書に関わる手間の問題については、ソフトウェアによって自動化することで解決しようとしている。具体的には、まず準備として、次の図のように対象のWebサーバとドメインを認証する。その際に確認された公開鍵と秘密鍵を用いて、証明書の発行や更新を自動的に実行する。

Let's EncryptによるWebサーバとドメインの認証の仕組み Let's EncryptによるWebサーバとドメインの認証の仕組み
上にあるのがLet's Encryptのサーバ。下側がWebサーバで、Let's Encryptの仕様にのっとって作られたクライアントプログラムをインストールする必要がある(詳しくは後述)。ここでは、Webサーバで認証用ファイルを公開する認証方式を前提としている(DNSレコードで認証することも可能)。
  (1)まず対象のドメイン名(FQDN)をLet's Encryptのサーバに伝える。
  (2)(1)に応じて生成した認証用の一時的な番号を、Webサーバに伝える。
  (3)Webサイト上の特定パスに、(2)から生成した認証用ファイルを配置する。
  (4)秘密鍵で(3)を署名してLet's Encryptのサーバに伝える。
  (5)「http://<ドメイン名>/.well-known/acme-challenge/<認証用ファイル名>」を参照して、認証用ファイルを取得する。
  (6)(4)(5)を確認して、認証に成功したかどうかをWebサーバに伝える。成功すると、(1)(5)までに使われた秘密鍵と公開鍵を用いて、以後の証明書の発行や更新、失効といった作業を自動的に実施できるようになる。

 上記の認証や、証明書の発行や更新、失効には、ACME(Automatic Certificate Management Environment)と呼ばれる通信プロトコルが利用される。

 Let's Encryptでは以上のような仕組みや仕様にのっとって、証明書の処理を自動実行するためのクライアント(エージェント)プログラムを提供している。公式にリリースされているものは、LinuxやBSD系ディストリビューションに対応している。

 一方、Windowsについてはサードパーティー製ツールが幾つか提供されている。

発行されるのは「正規」のサーバ証明書

 無償のサーバ証明書と聞くと、自己署名証明書(いわゆるオレオレ証明書)を思い浮かべるかもしれない。

 だがLet's Encryptが発行する証明書はそれと全く異なり、以前からある有償の証明書発行サービスと同じく、公的で正規の認証局と信頼の連鎖が結ばれている

Let's Encryptで発行された証明書での信頼の連鎖 Let's Encryptで発行された証明書での信頼の連鎖
これはLet's Encryptに発行してもらったサーバ証明書を、Windowsで開いたところ。
  (1)ルート証明書。古くから認証局を運営しているIdenTrust(旧Digital Signature Trust)社によるルート認証局を表している。同社はLet's Encryptのスポンサーでもある。
  (2)中間証明書。Let's Encryptが運営している認証局の1つを表している。
  (3)このサーバ証明書。(1)(2)(3)と信頼の連鎖が結ばれており、自己署名ではないことが分かる。

 また上記画面にある「DST Root CA X3」というルート証明書は、現在利用できるほとんどのコンピュータにプリインストールされている。そのため、このサーバ証明書を組み込んだWebサイトに対し、訪問するエンドユーザーは何ら特別な操作をすることなく、HTTPS経由でWebページを閲覧できる。

Let's Encryptではできないこと

 いいことずくめに思えるLet's Encryptだが、できないことや対応していないこともある。

 例えば、組織認証型の証明書やEV証明書は発行しておらず、ドメイン認証型の証明書のみ対応している(これらの区別は「実践! SSL証明書の買い方・選び方」を参照)。つまりドメイン自体は証明しても、その運営者までは証明してくれない。

 また、今のところワイルドカード証明書も発行していない。ただし、複数のドメインを証明できるSAN(Subject Alternative Names)には対応している。そもそもワイルドカード証明書の大きなメリットは、証明書の枚数を減らしてコストを下げ、かつ更新時の手間を少なくできることなので、無償で自動更新の可能なLet's Encryptで代替しやすいはずだ。

Let's Encryptの実際の使用例

 ここでは当フォーラムらしく、WindowsのIISによるWebサイトの例を挙げよう。クライアントプログラムとしては、前述の「letsencrypt-win-simple」を使ってみた。

 まず、上記のクライアントプログラムをダウンロードし、適当なフォルダに保存しておく。

 次に、Webサイトのローカルフォルダに「/.well-known/acme-challenge」というフォルダを作成し、上記プログラムに付属するweb.configを配置しておく(認証を要するサイトの場合、認証なしでアクセスできるようにweb.configを書き換える必要がある)。

 そして次のコマンドラインを実行する。letsencryptは上記プログラムの本体というべき実行ファイルだ。

letsencrypt --accepttos --manualhost <WebサイトのFQDN> --webroot <ローカルのWebサイトのパス>



 この1行だけで、Let's Encryptのサーバによる当該ドメインとWebサイトの認証、CSRの生成と送信、発行された証明書の保存、そして更新のためのタスク登録まで一気に実行される。

Let's Encryptで発行された証明書の例 Let's Encryptで発行された証明書の例
証明書そのものには、Let's Encrypt特有の仕様があるわけではない。
  (1)発行元。Let's Encryptによる中間認証局である。
  (2)有効期間は90日と短いものの、自動更新できるならデメリットにはならないだろう。
Let's Encryptで発行された証明書を更新するためのタスク Let's Encryptで発行された証明書を更新するためのタスク
このタスクはletsencrypt-win-simpleを実行したとき、ほぼ自動的に登録された。発行または更新してから60日が経過した証明書を自動的に更新し、有効期間を延長してくれる。
  (3)letsencrypt-win-simpleの実行プログラム。

 一方、HTTPSで接続できるようにWebサイトの設定を変更する作業は、今のところ手動で行う必要がある(といっても最初に1回実施すれば済む作業だ)。


 Let's Encryptが発行する証明書の有効期間は、執筆時点で90日(約3カ月)と、あまり長い方ではない。そのため、更新作業の自動化は必須といえよう。

 そのための設定には、(執筆時点では)前述のようなコマンドラインコマンドあるいはスクリプトのセットアップと実行が必要となる。またレンタルサーバのようにユーザーが管理者権限を取得できないサービスでは、サーバ運営側がLet's Encryptに明示的に対応する必要がある。現時点でいきなりHTTPS化が誰でもできるくらい簡単になる、というレベルには至っていない。

 それでも「無償」というインパクトは大きく、また自動化のためのソフトウェアツールも改良が続けられており、将来性は大いにある。もしエンジニアとしてWebサイトの設計や構築、運用に関わるなら、Let's Encryptの動向は注目しておく方がよいだろう。

「Tech Basics/Keyword」のインデックス

Tech Basics/Keyword

Copyright© 1999-2016 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

SIMフリースマホ「iPhone SE」をプレゼント!

ホワイトペーパー(TechTargetジャパン)

Focus

- PR -

編集部からのお知らせ

@IT編集部では、編集記者を募集しています。ご興味のある方は奮ってご応募ください。

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。