hysryt / wiki

https://hysryt.github.io/wiki/
0 stars 0 forks source link

Let's Encrypt #102

Open hysryt opened 5 years ago

hysryt commented 5 years ago

https://letsencrypt.jp/

hysryt commented 5 years ago

概要

Internet Security Research Group (ISRG) が運営する認証局(CA)。

ドメインを持つ人であれば 無料 で証明書を使用することができる。

運用が自動化されており、証明書の取得、更新に面倒な手間が必要ない。 自動発行、更新のプロトコルは公開されている。

2015年10月以降、Let's Encrypt の中間証明書は IdenTrust のルート証明書によってクロス署名され、多くのブラウザで信頼されるものとなっている。

IdenTrust -> Let's Encrypt -> 各サーバー証明書

IdenTrust は 2002年、Digital Signature Trust Co(DST)を買収している。 Let's Encrypt のルート証明書の名前が DST Root CA X3 となっているのはそのため。

Let's Encrypt では以下の理由から、証明書の有効期限を 90 日間としている。

ただし 60 日間での更新を推奨している。

Let's Encrypt が発行するのは DV 証明書のみ。

DV 証明書のメリットは以下の通り。

DV 証明書では運営者の実在性などは保証できない。 Let's Encrypt では証明書発行の前に一応 Google セーフブラウジング API でチェックをしているらしい。

hysryt commented 5 years ago

ACME プロトコル

ISRG によって設計され、 Let's Encrypt で使用されているプロトコル。 Web サーバーの設定とサーバー証明書の取得の、完全自動化を目的としている。

Webサーバー側で証明書管理エージェント(クライアントソフト)の実行が必要となる。

リファレンス実装として以下のソフトウェアがある。

最新は 2018年3月12日にリリースされた ACME v2 で、ワイルドカードドメインが使用可能となった。

ドメインの認証

証明書発行の権利を得るにはまずキーペアを生成し、そのキーペアとドメインの持ち主が自分であることを証明書管理エージェントから Let's Encrypt に証明する必要がある。

ドメインの持ち主である証明の方法は 2 種類ある。

example.com の例

キーペアの持ち主であることを証明するために、認証局はワンタイムトークンを発行し、それをキーペアの秘密鍵で署名することを要求する。

ドメインとキーペアの持ち主であることが証明できれば、認証局からの証明書を管理する権利を得ることができる。

一度認可を受ければ、証明書の取得、更新、失効は簡単に行うことができる。

証明書の発行

証明書管理エージェントはまず証明書発行の要求として CSR (Certificate Signing Request) を作成する。 CSR は RFC 2986 で標準化されている。

openssl での CSR の作成

CSR には 公開鍵情報組織名や所在地等(Distinguished Name) の情報を含める。

Distinguished Name

全て英語(ローマ字)で記述する。

項目 説明
コモンネーム CN SSL/TLS接続の際のURL(www.example.comなど)
組織名 OU サイトを運営する組織の正式名称
部門名 O 部門・部署名など任意の識別名称
市区町村名 L サイトを運営する組織の所在地
都道府県名 S/ST サイトを運営する組織の所在地
国別番号 C 国コード(日本の場合はJP)

証明書管理エージェントは CSR を秘密鍵で署名する。 この時の秘密鍵は、認証局に持ち主であることを認められたキーペアの秘密鍵を使用する。

CSR を受け取った認証局は、公開鍵で署名を確認することで認可した持ち主からの CSR であることを確認する。

問題がなければ証明書を発行する。

証明書の失効

証明書管理エージェントから証明書失効リクエストを認証局へ送る。

hysryt commented 5 years ago

Certbot

Let's Encrypt を使用する際のクライアントソフトの一つ。

インストール

Mac の場合は Homebrew からインストールできる。

$ brew install certbot

証明書を取得

$ certbot certonly --webroot /var/www/html -d example.com