当サイトは、無料 SSL/TLS 証明書発行サービス Let's Encrypt の非公式解説サイトです。
This is an unofficial website about Let's Encrypt.
更新

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 プラグイン)についての説明を追加しました。
2016年03月27日
  • SSL/TLS サーバ証明書の取得完了 に、「サーバ証明書(公開鍵)」「中間証明書」「サーバ証明書と中間証明書が結合されたファイル」「秘密鍵」に関する説明と、Apache(Apache 2.4.8 未満、Apache 2.4.8 以降)や nginx において使用するファイル・指定を行うディレクティブに関する情報を追加しました。
2016年04月15日
  • Let's Encrypt の正式サービス開始(公開ベータプログラム終了)に伴う情報の更新を行いました。
2016年04月27日
2016年04月28日
2016年05月13日
  • クライアントソフトウェアの名称変更に伴う情報の更新を行いました。
    • 「Let's Encrypt クライアント」という名称を「Certbot クライアント」に変更しました。
    • letsencrypt-autocertbot-auto に変更しました。
    • 「letsencrypt」から「certbot」へ表記が変更となった箇所を修正しました。
2016年05月18日
2016年06月02日
2016年06月14日
2016年10月14日
2017年04月29日
2017年04月30日
更新

Certbot クライアントの準備

1. インストール

Certbot クライアントの適切なインストール手順は、OS(ディストリビューション)によって異なります。使用している 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)が表示されます。

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 に切り替わったときに表示されるので、現時点では気にしなくて構いません。

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 に切り替わり、下記のメッセージが表示されます。

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.pemchainN.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回目の場合には、ファイル名の N1 となります。

※既に証明書等が保存されている状態で再度証明書等を取得した場合には、ファイル名の N2 以上の新しい番号で証明書等が保存されます。古い証明書等が上書きされることはありません。

また、上記の証明書等への シンボリックリンク が、下記の場所に作成されます。

サーバ証明書(公開鍵)
/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サーバの設定ファイルの書き換えが不要となります。

スポンサーリンク
Menu
ページトップへ