Let's Encryptを少し調べてみた
FreeBSDでacme-clientを利用してLet's Encryptの証明書取得を行うことを考えた。ので、ちょっと調べたメモ
Let's Encryptとは?
Let's Encryptは、公共の利益を図る目的で Internet Security Research Group (ISRG) が運営する、無料で利用でき、自動化されていて、オープンな認証局。
Let's Encryptの基本方針
- 無料
- ドメインを保持する者が無料で信頼された証明書を取得可能
- 運用の自動化
- 証明書の取得から更新まで自動化することが可能
- 安全
- 認証局サイド、管理者の両面から、最先端のプラットフォームを提供
- 透明性
- 証明書の発行と失効が公式に記録され、一般公開され、誰でも監査できる
- オープン
- 各手続き(プロトコル)を、オープン標準として公表
- 互助・協力
- コミュニティの利益のための共同の取り組みであり、1つの組織によって統制されているものではない
(以上、About - Let's Encrypt - Free SSL/TLS Certificatesより抜粋)
実際に利用するレベルから見ると、
- 無料でSSLサーバ証明書を発行してくれるサービス。
- あくまでもサーバー証明書のみであり、個人証明書などは発行しない
- ドメイン認証型の証明書
- 一般に、サーバー証明書は「ドメイン認証(DV)」、「組織(企業)認証(OV)」、「実在性監査済(EV)」がありますが、DVしか発行しない
- 無料の証明書にそこまで要求してはいけません。そのレベルの要求をするならお金を払いましょう。
というサービスを提供してくれるサイト及びサービスである。
日本語訳のサイトがあるので、是非一度見て見ることを勧める。Let's Encrypt 総合ポータル
注意点
- 有効期間が90日
- もう少し長くても良いような気もするが、自動化されている前提ならこれでいいのかもしれない。
- 暗号アルゴリズムの危殆化やProtocolの更新などを考えると、短い方が良いかもしれない。
- 秘密鍵ファイルはパスフレーズで暗号化していない
- HTTP ServerやSMTP Serverなど、Server用途で利用するなら、これはこれで仕方がないことかもしれない
- 秘密鍵ファイルの取り扱いには十分な注意をすること。SSLでHTTP部分を(多少)守ったからといって、サーバーが安全になるわけではないことに十分に留意すること
- 国コードや組織名の入力がない
- DV(Domain Validation)ならば、Domainが存在しており、かつ、そのドメインが正当であると判断できればよいので、国コードや組織名はなくても問題ない
- もちろん、OVやEVならば、組織の存在認定などを受けることからも、国コードや組織名は必要
証明書の取得方法
Let's EncryptはDV証明書を発行するにあたって、ACME(Automatic Certificate Management Environment)を使用する。 このACMEは2017/02/03現在、draft-ietf-acme-acme-04として公開されており、将来RFCになることが期待されている。
このACMEを利用した証明書取得のためのツールは様々あるが、Let's Encryptを利用するにあたっては、Let's Encryptが公開しているcertbotを利用するのが最も簡単であると思われる。
様々な実装のリストもLet's Encryptが公開している。https://letsencrypt.org/docs/client-options/
acmeで証明書を取得・失効する流れ
acme-clientのManual Pageから抄訳
証明書取得の流れは以下の通り。
- CA(Let's EncryptのACME Server)に接続し、リソースリストを要求する
- (Option) RSAアカウント鍵を作成・登録する
- RSAアカウント鍵の確認。これは、CAへの認証とその後すべてのやりとりに利用される
- 各domainごとに以下の処理を行う
- CAに対し、認証のChallengeを提出
- Challengeへの返答ファイルを作成する
- Cアのchallengeによる検証を待つ
- 展開されたRSAもしくはECDSAのdomain鍵を読み込む
- そのdomain及びaltnamesに記載されたドメイン用の、domain鍵を用いたX509リクエストを作成する
- X509リクエストへの署名をCAに要求する
- X509証明書(Certificate)をダウンロードする
- CA issureから来たX509証明書を展開する
- 証明書チェーンをissureからダウンロードする
証明書失効の流れも同様。
- CA(Let's EncryptのACME Server)に接続し、リソースリストを要求する
- (もし見つかれば)、X509証明書を読み込み展開する
- X509 失効要求書を作成する
- CAに失効要求書を提出
- 証明書、チェン、そして、全チェーンを削除する。
Challenge
ACMEにおけるChallengeとは、要するに「存在確認」を意味する。この存在確認方法として以下の3つがIDに定義されている。
- http-01
- tls-sni-01
- dns-01