たけぼーの備忘録

暇を持て余した人間の無意味なブログ

Let's Encryptとはなにか、について調べる

lets-encrypt
こんにちは。ご無沙汰しております。

本業の方が大変忙しく、最近更新できておりませんでしたが、今日は張り切っていきたいと思います!

今日の話題は、Let's Encryptです。
こちらのブログでもたびたび話題にして参りました。

Let's Encryptは何者なのか

最近、ふと思ったんです。Let's Encryptって何者!?

皆さんの中にも私のように、不思議に思われている方もいらっしゃるのではないでしょうか。

ん?Let's Encryptって何?という方もいらっしゃると思いますので、簡単に説明しておきます。もう分かってるよ、という方は読み飛ばしてください。すでに理解されている方は、そもそもこちらの記事なんか読まないかもしれませんが(笑)

Let's Encryptとは

Let's Encryptは、無料SSL証明書を取得することが出来るサービスです。

そもそもSSL証明書って?

SSL証明書とは、httpsでの通信を可能にするために必要なものです。

URLがhttps:// で始まるホームページはご覧になったこと、ありませんか?
Chromehttpsのサイトにアクセスすると、アドレスバーの左端に緑の鍵マークが現れます。
https

httpsSSLという暗号化技術によって、データのやりとりを暗号化するものです。

そう、SSL証明書SSLは、暗号化技術の名称を表していたんです。

例えるなら、SSL証明書運転免許証のようなものです。

運転免許証を持っている人は、しっかりとした運転技術を持っていると認められた人ですから、車が運転することを許可されたわけです。
さらに公的に発行された信頼度のあるものですから、身分証明にも使われますよね。

SSL証明書もこれに似たような機能を持っています。
暗号化を行うためには、と呼ばれる情報が必要です。
SSL証明書は、この鍵にあたる情報が含まれているため、ブラウザがこの鍵を使って暗号化を行うことが出来るようになります。

SSL証明書があって初めて暗号化することができる、というところが運転免許証と似ていますね。

さらに、SSLは相手の保証を行うものでもあります。
通信相手が実在することを、公的に信頼された機関が確認し、保証してくれます。
これがあるので、利用者は安心して暗号化できるわけです。

身元を保証する、というところが運転免許証と似ています。

一般的に、SSL証明書有料です。企業などで使われているものは、何万単位の費用がかかる高級(?)なものです。

無料で手に入る証明書

無料でこれを手に入れようと思うと、主に手段は主に

の2つがあります。

オレオレ証明書とはなにか

オレオレ証明書というのは、自分で作成した証明書のことです。

本来、専門の機関によって発行されるべき証明書を自分で生み出すわけですから、当然費用はかかりません。
しかし逆に、自作した証明書ということは、公的な機関から認証を受けない、ということになります。よって、この証明書に対しての信頼度は低くなるです。

ですから、ブラウザを通してオレオレ証明書を使ったサイトにアクセスすると、デカデカと警告が出てしまいます
このサイト、危険なんじゃない?という警告です。だって、誰かよく分からない鍵を暗号化に使ってるんですから。

そんなサイトにアクセスしますか?私ならしないでしょうね(笑)

なぜオレオレ証明書が必要なのか

では、なぜオレオレ証明書なるものが存在するかと言いますと、そもそも証明書がなければhttpsで通信できないからです。

これは先ほど説明したとおり、鍵が必ず必要だからです。
逆に、証明書さえあればhttpsで通信できます。

オレオレ証明書なら、通信する相手を保証してもらうことはできないけど、とにかく暗号化通信が始められるわけです。
昔は公的な機関から発行される証明書は有料のものしかなかったため、お金をかけずにとにかく暗号化するために、これが使われていました。

ここまでの話でお分かりの通り、オレオレ証明書は一般向けのサイトには向きません。だって、警告が出てしまいますから。
しかし、社内ネットワークで暗号化通信したい場合など、相手がすでに分かっていて保証の必要がない場合では、これで十分です。ブラウザを通さずにhttpsにて通信する場合もそうですね。

Let'sEncryptとは?

それに対して、Let'sEncryptとはなんでしょうか。

Let's Encryptにて提供されるのは、秘密鍵証明書中間証明書の3種類で、公的に信頼度のある証明書です。
これが無料で取得できるんです。

では、Let's Encryptとオレオレ証明書はどう違うのでしょうか。
ずばり、これは誰が発行するか、です。

オレオレ証明書が個人が勝手に発行したものであるのに対して、Let's Encryptはしっかりとした第三者機関によって発行されています。
これにより証明書に対する信頼度が格段に違うため、Let's Encryptで発行された証明書を使うと、無料でありながらブラウザで警告がでることなくhttpsで通信できるのです。

Let's Encryptは何者なのか

ここまで書いてまいりましたが、私はこんな疑問を抱いていました。

  • どこが発行しているのか
  • なぜ無料なのか
  • どのような仕組みなのか
  • 今後なくなることはないのか
  • 誰でも発行できれば、サイトの信頼性を保証できないのではないか

ここからは、これらの疑問を一つ一つ解決していく形で、書き進めていきます。

Q1.どこが発行しているのか

一体どこが発行しているのでしょうか。
かなりの普及を見せているLet'sEncryptですから、発行元が怪しいところではないと思われますが、気になります。

なぜこんなに信頼されているのでしょうか。

A1.ISRGという非営利団体がサービスを提供している

では、ここでLet'sEncryptの公式ページを見てみましょう。

うわ、英語かよ!となった方、大丈夫ですよ!
非公式ですが、Let'sEncryptについてまとめている日本語サイトがあります。

こちらのLet'sEncryptについて、から少し引用させてもらいます。

非営利団体の ISRG (Internet Security Research Group) が運営しており、シスコ(Cisco Systems)、Akamai電子フロンティア財団(Electronic Frontier Foundation)、モジラ財団(Mozilla Foundation)などの大手企業・団体が、ISRG のスポンサーとして Let's Encrypt を支援しています。

これによると、ISRGという機関が運営しているようです。
調べてみると、ISRGというのはアメリカにある公益法人で、経済的・技術的・教育的な面でインターネット上での安全な通信を行う障壁を減らすことを目的としているようです。

firefoxの開発で有名なmozillaやサーバーなどの製品やサービスを手がけるCisco情報理論を確立した学者シャノンの出身校であるミシガン大学などの関係者が役員をつとめています。

さらにISRGは、先ほど紹介したmozillaCisco、さらにはfacebookchromeWordpress.comを運営するautomatticや日本でも利用者の多いJimdoなど、様々な企業や団体がスポンサーとなっています。

このスポンサーを見ると、ネット業界で名を馳せたサービスや商品のプロバイダばかりです。chromemozillaが関わっているとなると、信頼度が違いますね。

だからLet'sEncryptは信頼されているのです。逆にブラウザ側からすれば、自分たちがお金を出しているところから発行されているから、信用するといったところでしょうか。

Q2.なぜ無料なのか

無料の理由、これが気になります。どうして無料なのでしょうか。
もしかして、有料サービスのお試しとか?なんて思ってしまいます。

先ほどのISRGのスポンサーを見ていると、有料サービスのお試し、ということはなさそうですが…

A2.非営利団体が運営する全自動認証のSSL証明書だから

では、先ほどのLet'sEncrypt日本語サイトを見てみましょう。

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

ここが、無料である一つの理由です。

Let'sEncryptの手続きはすべて自動で認証されています。
つまり、人の手が関わっていないわけです。
ですから、運営にかかる費用がうんと低くなるわけです。

さらに運営元のISRGは非営利団体ですから、元からお金を取る気はありません。

こんな理由で、無料で利用できるわけです。
役員のメンバーやスポンサーを見た限り、今後も有料化することはないでしょう。

先ほど、非営利団体が運営する全自動認証のSSL証明書だから無料なのだ、と書きましたが、私はその奥に別の理由もあるのではないかと思っています。

発行を行うISRGの出資元は、ほとんどが企業ですから、なにか目的があって出資するのだと思います。

例えば、chromeの開発元であるgoogleは、常時SSLを推奨しています。
これはサイトがハッキングされ、マルウェアに感染することを防ぎたいと考えているようです。これらのマルウェアに汚染されたサイトが、自分達のサービスに悪影響を与えるかもしれませんから。

しかし、有料の証明書しかなければ、金銭的な理由からなかなか常時SSLのサイトは増えません。
個人でやるブログなんかは、あまり常時SSLにする必要性を感じにくいですから。

ですから、常時SSLの普及にはLet'sEncryptのようなサービスが欠かせないわけですね。

このように、様々な企業や団体の思惑が重なった結果として、Let'sEncryptという無料のサービスが出来上がったわけです。

こんな理由もあるのではないかな、と私は思います。

Q3.どのような仕組みなのか

先ほど、自動化という出てきましたが、どのようにして証明書の発行を行うのでしょうか。

人力の発行ではない、ということは何となくお分かりいただけているのでは、と思います。

A3.クライアントソフトと認証局が発行を自動化している

Let'sEncryptにおける認証方法

認証には、独自のクライアントソフトを使って行います。

このクライアントソフトはcertbotと呼ばれ、多くのLinuxディストリビューションmacOS版が公開されています。
残念ながらWindows版のcertbotはないので、ほかのツールを使うか、最近Windowsで利用可能となったbashを使うこととなります。

取得したいドメインを本当に証明するために、Let'sEncryptには主に2種類の認証方法が用意されています。それは

  • ドメインDNSレコードに指定されたレコードが存在するか
  • 指定されたURLに認証用ファイルが存在するか

の2つです。

DNSでの認証では、_acme-challenge.(自分のドメイン名)に指定されたTXTレコードを設定します。
これを行うためには、DNSを自分で設定できる環境でなければならず、レンタルサーバーでは実現出来ないことが多々あります。

ファイルにて認証する場合、指定されたパスに指定されたファイルを置き、それを確認するというものです。
これは多くの方が実行可能でしょう。ホームページを運営しているなら、ファイルをアップできない、なんてことはあり得ませんから。

しかし、メールサーバーなどではこれは可能でないかもしれません。そんなときはDNS認証を行います。

認証を行う仕組み - ACME

認証の仕組みは少し専門用語が多くなります。暗号化に対する基礎知識がないと厳しいかもしれません。

でも大丈夫です。認証の仕組みを知らなくてもちゃんと使えるようになっています!

認証には、ACMEという通信プロトコルにて、クライアントソフトと認証局とのやりとりが行われます。

まず、クライアントソフトは認証してほしいドメイン認証局に通知します。

認証局はその通知に対して、認証に必要な情報をクライアントソフトに送ります。
ここで送られる情報は、認証用の番号認証用ファイルで、認証局によって自動的に生成されます。
認証用ファイルは、先ほど説明したファイル認証でサーバーにアップロードする為のもので、DNS認証の場合にはファイルの代わりに登録すべきDNSレコードが送られます。

クライアント側は認証に必要な設定(ファイル認証なら指定のパスにファイルをアップロードする)を行った後、認証のための準備ができたことを認証局に通知します。
このとき同時に、先ほど送られた認証用番号をクライアントソフトが生成した秘密鍵で署名し、公開鍵とともに認証局へ送ります。

認証局が認証に必要な設定がされたかを確認し、またクライアントソフトから送られてきた認証用番号の確認を行います。

すべて確認が終了すると、正式に認証されたことがクライアントソフトに通知されます。

この一連の流れで認証が自動で行われます。私たちが直接行わなければならないのはクライアントソフトの実行認証のための設定のみです。
認証自体の仕組みについては理解する必要はありません。

一度証明書が発行されたら、更新するのは簡単で、認証作業は必要ありません。

こちらが大変わかりやすく、参考になりました。詳しくは公式ページにも書かれています。

Q4.今後なくなることはないのか

Webサービスは、突如開発が中止されることはよくあります。

また、どこかの企業に吸収されてしまう、ということもしばしばです。

急に有料化してしまったら、httpsに対応させたものをわざわざhttpに戻さないといけないかもしれません。

それは非常に面倒ですよね。

では、無くなることはないのでしょうか。

A4.無くならない可能性が高い

正直なところ、Let'sEncryptが今後なくなる可能性はないとは言えません

しかし、googleSSLに対応しているかどうかを検索順位に考慮する、と発表するように、httpsの利用はさらに重視され普及が進むと思います。

ISRGが掲げる理念を基に考えると、この団体に金銭的な問題が起こらない限り、Let'sEncryptは無くならないでしょう。

スポンサーを見ると、主要なブラウザを開発する団体が資金提供を行っていますから、金銭的問題も起こりにくいのではないでしょうか。

つまり、Let'sEncryptが急になくなるとは考えにくいように思います。

Q5.誰でも発行できれば、サイトの信頼性を保証できないのではないか

最後の疑問となりました。
いろいろ調べていて、ふと思いました。

誰もが証明書を取得できたら、信頼性のある証明書では無いのではないでしょうか。

例えば、詐欺を行おうとする人であっても取得できるわけですから、サイトに対する信頼性を証明することが出来ないのではないか、と。

しかし、ここに私の思い違いがありました。

A5.サイト自体の信頼性を保証するSSL証明書は種類が別

SSL証明書httpsによって通信するためのツールであって、サイト自体の安全性を必ずしも保証するものではないのです。

私自身、『SSL証明書 = 安全性を保証する』という感覚を持っていましたが、実際にはそうとは限りません。

こちらにその事が丁寧に書かれています。

このページから引用すると、

SSL/TLSサーバ証明書には「ドメイン認証」「企業実在認証」「Extended Validation(EV)」の3種類が存在します。ドメイン認証は最も手軽な反面、ドメインの使用権のみを認証する証明書しか発行できません。組織の実在認証をするためには「企業実在認証」、「EV」を導入する必要があります。また企業実在認証もドメインの使用権と組織の法的実在の認証は可能ですが、それ以上の「組織の物理的実在」「組織の運営」などのより高度な認証を行うにはEVの導入が必要です。

と書かれています。

ここで書かれているように、企業実在認証EVでなければちゃんとした通信相手なのかを保証することはできないということです。

Let'sEncryptはドメイン認証を行うだけですから、ドメインが存在することを証明しただけですから、相手がどうであるかは証明されていないのです。

しかし、ブラウザでは緑の鍵マークがでて、いかにも安全です、という印象を与えます。

これでは、もし詐欺サイトで使われていた場合、間違った印象を与えるでしょう。

私はこれがLet'sEncryptの欠点なのではないかと思います。

証明書が有料であった昔は、証明書が安全の証のようになっていましたが、これを改める時が来たのかもしれません。

最後に

長々と書いてまいりましたが、いかがだったでしょうか。

Let'sEncryptは大変素晴らしいサービスですので、皆さんにぜひぜひ使っていただきたいです。

ではまた。