更新

Let's Encrypt の使い方

Let's Encrypt は、クライアントソフトウェア「Certbot」を使用することで、SSL/TLS サーバ証明書の取得・更新作業を自動化できる仕組みになっています。

独自ドメインがあれば、簡単なコマンド操作で SSL/TLS 証明書(無料)を取得できます。

Certbot 以外の ACME クライアント (英文) から Let's Encrypt の証明書を取得・管理することも可能です。

より詳しく知りたい方へ

このページでは、Certbot クライアント(旧・Let's Encrypt クライアント)の 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日
更新

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 サーバ証明書の取得 に進みます。

ヘルプオプションの仕様変更について(2016年05月18日 追記)

./certbot-auto を一度も実行したことがない場合( --help オプションやその省略形の --h オプションを付けて実行した場合は除く)には、./certbot-auto --help./certbot-auto -h (省略形)を実行した際に、root権限の要求やパッケージのダウンロード・自動アップデートが行われない仕様に変更されました。

詳しい情報については certbot-auto --help の仕様変更について をご覧ください。

4. CentOS 6 でエラーが発生する場合

CentOS 6 や Red Hat Enterprise Linux 6(RHEL 6)において、テスト実行 を行った際にエラーが発生した場合には、下記ページをご覧ください。

更新

SSL/TLS サーバ証明書の取得

Let's Encrypt で SSL/TLS サーバ証明書を取得する際には、一般の認証局で SSL/TLS サーバ証明書を取得する場合とは異なり、秘密鍵・公開鍵・署名リクエスト(CSR)を手動で生成する必要はありません。これらの作業は、Certbot クライアントが自動的に行います。

1. DNS設定と準備

Let's Encrypt のサーバから、入力したドメイン名を正引き(DNSのAレコードの参照)したIPアドレスの TCP Port 80 と TCP Port 443 に接続することで、ドメイン所有者であることの認証が行われます。

そのため、Certbot クライアントは、インターネットから当該ドメイン名にアクセスした際に接続されるサーバ(DNSのAレコードで指定されたIPアドレスのサーバ)で実行する必要があります。また、ルータやファイアウォールで TCP Port 80 や TCP Port 443 をブロックしている場合、予めインターネットからの接続(インバウンド)を許可する設定に変更する必要があります。

2. Certbot クライアントの実行

次のコマンドを入力すると、Let's Encrypt 発行の SSL/TLS サーバ証明書を取得するためのプログラムが起動して、画面が CLI から TUI に切り替わります。

入力するコマンド:
certbot certonly --standalone -d example.jp -d www.example.jp

※OS のパッケージ管理システム以外から certbot-auto をダウンロードした場合には、上記コマンドの certbot/path/to/certbot-auto/path/to/ には実際のパスを入力)に置き換えてください。

※オプション -d で指定されている example.jp www.example.jp は、サーバ証明書の取得を希望するドメイン名・サブドメイン名(ご自身で使用しているドメイン名)に置き換えてください。

3. クライアントの自動アップデート

Certbot クライアントを実行すると、新しいバージョンのクライアントの有無が自動的にチェックされ、必要に応じてアップデートされます。

アップデートには数秒~数十秒程度かかりますので、しばらくお待ちください。

アップデート中に表示されるメッセージ:
Checking for new version...

4. メールアドレスの入力

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.

5. 利用規約への同意

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

6. ドメイン名の入力

Certbot クライアントの実行時に、オプション「-d」で SSL/TLS サーバ証明書の取得を希望するドメイン名を指定しなかった場合には、TUI で入力が求められます。

オプション「-d」が指定されていた場合には、この画面は表示されずに次のステップに進みます。

Please enter in your domain name(s) (comma and/or space separated)

7. Webサーバの一時停止

TCP Port 80 や TCP Port 443 を Apache や nginx などのWebサーバソフトウェアが Listen している場合には、下記のエラーメッセージが表示されます。

※下記のエラーメッセージが表示されて Certbot クライアントが終了された場合であっても 4. メールアドレスの入力5. 利用規約への同意 の内容は保存されています。そのため、Webサーバの停止後に Certbot クライアントを再度実行すると、すぐに SSL/TLS サーバ証明書の取得処理が始まります。ただし、オプション「-d」で SSL/TLS サーバ証明書の取得を希望するドメイン名を指定しない場合には、TUI で入力が求められます。

TUI に表示されるエラーメッセージの例:
The program httpd (process ID 4078) is already listening on TCP port 80. This will prevent us from binding to that port. Please stop the httpd program temporarily and then try again.

※表示されるエラーメッセージにおける httpd の process ID は環境により異なります。

CLI に出力されるエラーメッセージ:
At least one of the (possibly) required ports is already taken.

Certbot クライアントは、ドメイン所有者であることの認証に TCP Port 80 と TCP Port 443 を使用しているため、SSL/TLS サーバ証明書を取得プロセスを完了させるためには、Webサーバを一時的に終了させる必要があります。

下記のコマンドを入力して、Webサーバを一旦停止させます。

※OS や設定によって、Webサーバを停止するコマンドは異なります。

※Webサーバ(httpd)を停止せずにドメイン使用権者の認証プロセスを実行したい場合には Webroot プラグイン をご利用ください。ただし、その場合でも新しい証明書をロードするために Webサーバの再起動が必要となる場合があります。

入力するコマンドの例:
sudo service httpd stop

その後、Certbot クライアントを再度実行します。

入力するコマンド:
certbot certonly --standalone -d example.jp -d www.example.jp

※OS のパッケージ管理システム以外から certbot-auto をダウンロードした場合には、上記コマンドの certbot/path/to/certbot-auto/path/to/ には実際のパスを入力)に置き換えてください。

※オプション「-d」で指定されている「example.jp」「www.example.jp」は、サーバ証明書の取得を希望するドメイン名・サブドメイン名(ご自身で所持されているドメイン名)に置き換えてください。

Certbot クライアントによる SSL/TLS サーバ証明書の取得プロセスは通常数秒~十数秒程度で完了します。SSL/TLS サーバ証明書の取得処理が完了した直後に停止させていたWebサーバを起動することで、多くの場合、ダウンタイム(Webサーバを一時停止している時間)は数十秒以内に抑えられます。

※Webサーバ(httpd)を停止せずにドメイン使用権者の認証プロセスを実行したい場合には Webroot プラグイン をご利用ください。ただし、その場合でも新しい証明書をロードするために Webサーバの再起動が必要となる場合があります。

8. DVSNI challenge エラーについて

Let's Encrypt 認証サーバから Certbot クライアントを実行しているサーバに対する接続を確立できない場合には、「Failed to connect to host for DVSNI challenge」というエラーが発生します。

外部(インターネット)から TCP Port 80 と TCP Port 443 の両方 に接続を確立できるようにルータやファイアウォールが構成されているかどうか、再度ご確認ください。

詳しくは DVSNI challenge エラーの対処法 をご確認ください。

9. 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 2016-08-16. To obtain a new version of the certificate in the future, simply run Certbot again. - 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 には取得したドメイン名、2016-08-16 には取得した Let's Encrypt 発行の SSL/TLS サーバ証明書の有効期限が入ります。

7. Webサーバの一時停止 で Webサーバを終了させていた場合には、忘れずに起動させておきましょう。

入力するコマンドの例:
sudo service httpd start

取得した証明書等の 実体 は、下記の場所に保存されます。

サーバ証明書(公開鍵)
/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
ページトップへ