Let's Encrypt の使い方
Let's Encrypt は、クライアントソフトウェア「Certbot」を使用することで、SSL/TLS サーバ証明書の取得・更新作業を自動化できる仕組みになっています。
独自ドメインがあれば、簡単なコマンド操作で SSL/TLS 証明書(無料)を取得できます。
※一般の認証局で SSL/TLS サーバ証明書を取得する場合とは異なり、秘密鍵・公開鍵・署名リクエスト(CSR)を手動で生成する必要はありません。これらの作業は、Certbot クライアントが自動的に行います。
※Certbot 以外の ACME クライアント (英文) を使用して Let's Encrypt の証明書を取得することも可能です。
より詳しく知りたい方へ
このページでは、Certbot クライアント(旧・Let's Encrypt クライアント)のプラグイン Webroot または Standalone を使用して SSL/TLS サーバ証明書を取得する方法について解説しています。
その他のプラグインの使用方法などの、詳しい情報については、下記ページをご覧ください。
このページの更新履歴
- 2015年12月18日
-
-
CLI に入力するコマンドにおいて、省略可能な下記のオプションを削除しました。
--server https://acme-v01.api.letsencrypt.org/directory
- Webサーバ(httpd)を停止せずに SSL/TLS サーバ証明書を取得する方法(Webroot プラグイン)についての説明を追加しました。
-
CLI に入力するコマンドにおいて、省略可能な下記のオプションを削除しました。
- 2016年03月27日
-
- SSL/TLS サーバ証明書の取得完了 に、「サーバ証明書(公開鍵)」「中間証明書」「サーバ証明書と中間証明書が結合されたファイル」「秘密鍵」に関する説明と、Apache(Apache 2.4.8 未満、Apache 2.4.8 以降)や nginx において使用するファイル・指定を行うディレクティブに関する情報を追加しました。
- 2016年04月15日
-
- Let's Encrypt の正式サービス開始(公開ベータプログラム終了)に伴う情報の更新を行いました。
- 2016年04月27日
-
- git のインストール (CentOS 6) を追加しました。
- 2016年04月28日
-
- CentOS 6 で発生するエラーの対処法 を追加しました。
- 2016年05月13日
-
-
クライアントソフトウェアの名称変更に伴う情報の更新を行いました。
- 「Let's Encrypt クライアント」という名称を「Certbot クライアント」に変更しました。
letsencrypt-auto
をcertbot-auto
に変更しました。- 「letsencrypt」から「certbot」へ表記が変更となった箇所を修正しました。
-
クライアントソフトウェアの名称変更に伴う情報の更新を行いました。
- 2016年05月18日
-
- 仕様変更に伴い テスト実行 を更新しました。
- certbot-auto --help の仕様変更について を追加しました。
- DVSNI challenge エラーの対処法 を追加しました。
- 画像やメッセージの内容を最新のものに差し替えました。
- 2016年06月02日
-
- CentOS 6 で発生するエラーの対処法 を更新しました(パッケージ名の変更や CentOS 6.7 から CentOS 6.8 へのアップデートに伴う更新)。
- 2016年06月14日
-
- コマンド解説 (コマンドリファレンス) を追加しました。
- 2016年10月14日
-
- git を使用した Certbot クライアントのダウンロード方法の解説を削除して、電子フロンティア財団(EFF)の公式サイトから Certbot クライアントをダウンロードする方法 の解説を追加しました。
- インストール (Certbot クライアントの準備) を全面的に改訂して、OS(ディストリビューション)別に適切なインストール手順を説明する方式に変更しました。
- CentOS 6 で発生するエラーの対処法 を更新しました(certbot-auto 0.9.3 において不具合が解消していることを確認したため)。
- 2017年04月29日
-
- DNS設定と準備 に Manual プラグイン に関する補足説明を追加しました。
- SSL/TLS サーバ証明書の取得 を全面的に改訂して、従来の Standalone プラグイン を基本とした解説から、Webroot プラグイン を基本とした解説に変更しました。
- 項目名「Certbot クライアントの実行」を 証明書取得コマンドの実行 に変更しました。
- 2017年04月30日
-
- 証明書取得コマンドの実行 の解説を更新しました。
- SSL/TLS サーバ証明書の取得完了 の「CLI に出力されるメッセージ」を最新の内容に更新しました。
Certbot クライアントの準備
1. インストール
Certbot クライアントの適切なインストール手順は、OS(ディストリビューション)によって異なります。使用している OS を選んでください。
- Debian 7 (wheezy)
- Debian 8 (jessie)
- Debian testing / unstable
- Debian (その他)
- Ubuntu 16.04 (xenial)
- Ubuntu 14.04 (trusty)
- Ubuntu (その他)
- Gentoo
- Arch Linux
- Fedora 22 以下
- Fedora 23 以上
- CentOS 6 / RHEL 6
- CentOS 7 / RHEL 7
- FreeBSD
- OpenBSD
- Mac OS X
- その他の UNIX 系 OS
※OS のパッケージ管理システムを使用するのではなく、電子フロンティア財団(EFF)の公式サイトから Certbot クライアントを直接ダウンロードしたい場合には、その他の UNIX 系 OS の手順に従ってください。
2. テスト実行(方法)
OS のパッケージ管理システムから Certbot パッケージをインストールした場合:
下記のコマンドを入力します。
certbot
"certbot-auto" を "wget" や "git clone" コマンドなどでダウンロードした場合:
ダウンロード先のディレクトリに cd
コマンドなどで移動してから、
スクリプトファイル "certbot-auto" を実行します。
./certbot-auto
※root 権限への昇格が要求されます(Certbot クライアントが root 権限を要求する理由)。
※Certbot クライアントを実行すると、パッケージ管理システム(yum など)を使用したパッケージのインストール・アップデートが、確認画面の表示無しで自動的に行われます。厳格にパッケージのバージョンを管理しているサーバの場合にはご注意ください。自動的にインストール・アップデートされるパッケージは、「python」「python-virtualenv」「python-pip」「python-devel」「python-tools」「tcl」「tix」「tk」「tkinter」「gcc」「augeas-libs」「openssl」「ca-certificates」「dialog」「libffi-devel」「openssl-devel」「redhat-rpm-config」「keyutils-libs-devel」「krb5-devel」「libcom_err-devel」「libselinux-devel」「libsepol-devel」「zlib-devel」「mod_ssl」です(2016年05月18日 に CentOS 6.7 で確認)。なお、左記のパッケージ一覧は環境により異なる場合があり、将来的に変更される可能性があります。
3. テスト実行(結果)
特に問題がない場合には、Certbot クライアントが起動して、下記の画面(TUI)が表示されます。
No names were found in your configuration files.
You should specify ServerNames in your config files in order to allow for accurate installation of your certificate.
If you do use the default vhost, you may specify the name manually.
Would you like to continue?
ここでは < No > を選択して、SSL/TLS サーバ証明書の取得 に進みます。
CentOS 6 でエラーが発生する場合
CentOS 6 や Red Hat Enterprise Linux 6(RHEL 6)において、テスト実行 を行った際にエラーが発生した場合には、下記ページをご覧ください。
ヘルプオプションの仕様変更について(2016年05月18日 追記)
./certbot-auto
を一度も実行したことがない場合( --help
オプションやその省略形の --h
オプションを付けて実行した場合は除く)には、./certbot-auto --help
や ./certbot-auto -h
(省略形)を実行した際に、root権限の要求やパッケージのダウンロード・自動アップデートが行われない仕様に変更されました。
詳しい情報については certbot-auto --help の仕様変更について をご覧ください。
4. DNS設定と準備
Let's Encrypt では、ドメイン名の使用権者であることの認証を、証明書を取得するドメイン名(FQDN)を正引き(DNSのAレコードの参照)したIPアドレスで運用されているWebサーバに対して、Let's Encrypt の認証サーバからアクセスすることによって行います。
そのため、Certbot クライアントは、インターネットからアクセス可能なサーバで実行する必要があります。また、ルータやファイアウォールで TCP Port 80 や TCP Port 443 をブロックしている場合、予めインターネットからの接続(インバウンド)を許可する設定に変更する必要があります。
※Manual プラグイン を使用することで、certbot
を SSL/TLS サーバ証明書を運用するマシン以外で実行して、ドメイン使用権者の認証ステップを手動で行うことも可能です。
SSL/TLS サーバ証明書の取得
1. 証明書取得コマンドの実行
Certbot クライアントを使用して Let's Encrypt 発行の SSL/TLS サーバ証明書を取得するためのコマンドを実行します。
コマンド実行後は、初回(過去に Certbot で証明書を取得したことがない場合)のみ、画面が CLI から TUI に切り替わり、メールアドレスの入力 や 利用規約への同意 が求められます。
注意事項
※OS のパッケージ管理システム以外から certbot-auto
をダウンロードした場合には、下記の「入力するコマンド」における certbot
を /path/to/certbot-auto
( /path/to/
には実際のパスを入力)に置き換えてください。
※Let's Encrypt では、ワイルドカード証明書(全てのサブドメイン名に有効な証明書)は発行できません。証明書取得時には、全ての FQDN (サブドメイン名を含むドメイン名) を -d
オプションで列挙してください。
Webサーバ(Apache や nginx など)が動作している環境において、
FQDN "example.jp" (サブドメイン名:無し) のみに対応する証明書を取得する場合:
certbot certonly --webroot -w /var/www/html -d example.jp
※オプション -w
で指定されている /var/www/html
は、Webサーバ(Apache や nginx など)における、証明書を取得するドメイン名に対応した DocumentRoot に置き換えてください。
※オプション -d
で指定されている example.jp
は、証明書を取得するドメイン名に置き換えてください。
※このコマンドで取得した証明書は、FQDN "example.jp" (サブドメイン名:無し) に対してのみ有効です。
サブドメイン名を含む "www.example.jp" や "sub.example.jp" などの FQDN に対しては無効です。
Webサーバ(Apache や nginx など)が動作している環境において、
"example.jp" と "www.example.jp" に対応する証明書を取得する場合:
certbot certonly --webroot -w /var/www/html -d example.jp -d www.example.jp
※オプション -w
で指定されている /var/www/html
は、Webサーバ(Apache や nginx など)における、証明書を取得するドメイン名に対応した DocumentRoot に置き換えてください。
※オプション -d
で指定されている example.jp
www.example.jp
は、証明書を取得するドメイン名・サブドメイン名に置き換えてください。
※このコマンドで取得した証明書は、FQDN "example.jp" と "www.example.jp" に対してのみ有効です。
"sub.example.jp", "sub.www.example.jp", "www2.example.jp" などの FQDN に対しては無効です。
Webサーバ(Apache や nginx など)が動作している環境において、
複数のドメイン名に対応する1枚の証明書を取得する場合:
複数のドメイン名に対応する1枚の SSL/TLS サーバ証明書を取得する場合には、ドメイン名ごとに DocumentRoot が異なる場合があるため、それぞれのドメイン名に対応する DocumentRoot を個別に指定することができます。
複数のドメイン名を指定した場合、それぞれのドメイン名に対して、最後に指定した DocumentRoot --webroot-path
(省略形 -w
)が適用されます。
例えば、
certbot certonly --webroot -w /var/www/example/ -d www.example.com -d example.com -w /var/www/other -d other.example.net -d another.other.example.net
と指定した場合、指定した全てのドメイン名(www.example.com, example.com, other.example.net, another.other.example.net)に使用可能な1枚の SSL/TLS サーバ証明書が発行されます。
ドメイン使用権者の認証の際には、ドメイン名 www.example.com と example.com に対しては DocumentRoot /var/www/example/
が使用され、ドメイン名 other.example.net と another.other.example.net に対しては DocumentRoot /var/www/other
が使用されます。
より詳しい情報については、Webroot プラグインの解説 をご覧ください。
Webサーバ(Apache や nginx など)が動作していない環境において、
Certbot クライアント内蔵 httpd でドメイン認証を行って証明書を取得する場合:
Webサーバ(Apache や nginx など)が動作していない環境の場合には、--standalone
オプションを指定します。
ドメイン使用権者の認証(Let's Encrypt のサーバから、証明書を取得するドメイン名を正引きしたIPアドレスに接続することによる認証)の際には、Certbot クライアントに内蔵されている簡易的なウェブサーバが機能が一時的に使われます。
certbot certonly --standalone -d example.jp -d www.example.jp
※オプション -d
で指定されている example.jp
www.example.jp
は、証明書を取得するドメイン名・サブドメイン名に置き換えてください。
※このプラグインは TCP Port 80 もしくは TCP Port 443 を使用するため、Webサーバ(Apache や nginx など)が動作している環境(当該 Port を Listen できない環境)の場合には、エラーが発生します。
2. クライアントの自動アップデート
Certbot クライアントを実行すると、新しいバージョンのクライアントの有無が自動的にチェックされ、必要に応じてアップデートされます。
アップデートには数秒~数十秒程度かかりますので、しばらくお待ちください。
Checking for new version...
3. メールアドレスの入力 (初回のみ)
Certbot クライアントが起動すると、「Enter email address (used for urgent notices and lost key recovery)」という入力欄が表示されるので、メールアドレスを入力します。
ここで入力したメールアドレスは、緊急の通知、鍵を紛失したときの復旧、証明書の有効期限が近付いた場合の通知に使用されます。
メールアドレスを入力して「了解」を選択すると、CLI に次のメッセージが出力されます。
※TUI が終了して CLI に切り替わったときに表示されるので、現時点では気にしなくて構いません。
IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
e-mails sent to webmaster@example.jp.
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
4. 利用規約への同意 (初回のみ)
Let's Encrypt の利用規約(Terms of Service)への同意が求められます。
問題が無ければ、Agree(同意)を選択して、次のステップへ進みます。
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf.
You must agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
5. ドメイン名の入力
Certbot クライアントの実行時に、オプション「-d」で SSL/TLS サーバ証明書の取得を希望するドメイン名を指定しなかった場合には、TUI で入力が求められます。
オプション「-d」が指定されていた場合には、この画面は表示されずに次のステップに進みます。
Please enter in your domain name(s) (comma and/or space separated)
6. DVSNI challenge エラーについて
Let's Encrypt 認証サーバから Certbot クライアントを実行しているサーバに対する接続を確立できない場合には、「Failed to connect to host for DVSNI challenge」というエラーが発生します。
外部(インターネット)から TCP Port 80 と TCP Port 443 の両方 に接続を確立できるようにルータやファイアウォールが構成されているかどうか、再度ご確認ください。
詳しくは DVSNI challenge エラーの対処法 をご確認ください。
7. SSL/TLS サーバ証明書の取得完了
SSL/TLS サーバ証明書の取得が完了すると、証明書等が /etc/letsencrypt
ディレクトリ以下に自動的に保存され、TUI から CLI に切り替わり、下記のメッセージが表示されます。
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.jp/fullchain.pem. Your cert will
expire on 2017-07-29. To obtain a new or tweaked version of this
certificate in the future, simply run certbot-auto again. To
non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
※メッセージの example.jp の部分には証明書を取得したドメイン名(複数のドメイン名に対応した1枚の証明書の場合には代表となるドメイン名)が出力され、2017-07-29 の部分には証明書の有効期限が出力されます。
取得した証明書等の 実体 は、下記の場所に保存されます。
- サーバ証明書(公開鍵)
-
/etc/letsencrypt/archive/ドメイン名/certN.pem
※このファイルは SSL/TLS サーバ証明書(公開鍵を含む)です。中間証明書や秘密鍵は含まれていません。
※このファイルは Apache 2.4.8 未満 において、SSLCertificateFile ディレクティブで指定します。
※Apache 2.4.8 以降 や nginx では、このファイルは使用しません。
- 中間証明書
-
/etc/letsencrypt/archive/ドメイン名/chainN.pem
※このファイルは、Webサイトへのアクセス時にブラウザに提供する中間証明書です。
※このファイルは Apache 2.4.8 未満 において、SSLCertificateChainFile ディレクティブで指定します。
※Apache 2.4.8 以降 や nginx では、このファイルは使用しません。
- サーバ証明書と中間証明書が結合されたファイル
-
/etc/letsencrypt/archive/ドメイン名/fullchainN.pem
※このファイルは、
certN.pem
とchainN.pem
の内容が結合されたファイルです。SSL/TLS サーバ証明書(公開鍵を含む)と中間証明書の両方が含まれています。※このファイルは、Apache 2.4.8 以上では SSLCertificateFile ディレクティブ、nginx では ssl_certificate ディレクティブで指定します。
※Apache 2.4.8 未満 では、このファイルは使用しません。
- 秘密鍵
-
/etc/letsencrypt/archive/ドメイン名/privkeyN.pem
※このファイルは Apache(全バージョン) の SSLCertificateKeyFile ディレクティブ、nginx の ssl_certificate_key ディレクティブで指定します。
※ファイル名の N には、取得した証明書等の番号(発行順で連番)が入ります。
※Let's Encrypt で当該ドメインの証明書を発行したのが1回目の場合には、ファイル名の N は 1 となります。
※既に証明書等が保存されている状態で再度証明書等を取得した場合には、ファイル名の N が 2 以上の新しい番号で証明書等が保存されます。古い証明書等が上書きされることはありません。
また、上記の証明書等への シンボリックリンク が、下記の場所に作成されます。
- サーバ証明書(公開鍵)
- /etc/letsencrypt/live/ドメイン名/cert.pem
- 中間証明書
- /etc/letsencrypt/live/ドメイン名/chain.pem
- サーバ証明書と中間証明書が結合されたファイル
- /etc/letsencrypt/live/ドメイン名/fullchain.pem
- 秘密鍵
- /etc/letsencrypt/live/ドメイン名/privkey.pem
※既に証明書等が保存されている状態で新しい証明書等を取得した場合には、シンボリックリンクのリンク先のパスが新しい証明書等に変更されます。
※Apache や nginx などのWebサーバの設定で SSL/TLS の証明書等のファイルを指定する際に、シンボリックリンクで指定しておくと、証明書等の更新時にWebサーバの設定ファイルの書き換えが不要となります。
- スポンサーリンク