Let's Encrypt ユーザーガイド
「Let's Encrypt ユーザーガイド」は、User Guide — Certbot 0.10.0.dev0 documentation の全文を和訳(意訳)した上で、補足説明などを加えたものです。
詳しくは 翻訳記事の出典と留意事項 をご覧ください。
クライアントソフトウェアの名称変更について
「Let's Encrypt クライアント」の名称は、「Certbot クライアント」に変更されました。
それに伴って、letsencrypt-auto
が certbot-auto
になるなど、ファイル名・ディレクトリ名・コマンド名・URLなども変更されました。
このページの更新履歴
- 2016年05月07日
-
- letsencrypt-auto を更新して訳注を追加しました(現在は certbot-auto)。
- Webroot プラグイン と Standalone プラグイン に詳しい解説を追加しました。
- 2016年05月08日
-
- ネイティブパッケージ を修正しました。
- Let's Encrypt クライアントの
renew
オプション実装に伴い SSL/TLS サーバ証明書の更新 の内容を改定しました。 - Let's Encrypt 設定ファイル を更新しました。
- OS のパッケージを使う方法 の Debian の内容を更新しました。
- OS のパッケージを使う方法 に OpenBSD・Fedora・Gentoo を追加しました。
- 2016年05月09日
-
- OS のパッケージを使う方法 の Debian に訳注を追加しました。
- 2016年05月13日
-
-
クライアントソフトウェアの名称変更に伴う情報の更新を行いました。
- 「Let's Encrypt クライアント」という名称を「Certbot クライアント」に変更しました。
letsencrypt-auto
をcertbot-auto
に変更しました。- 「letsencrypt」から「certbot」へ表記が変更となった箇所を修正しました。
-
クライアントソフトウェアの名称変更に伴う情報の更新を行いました。
- 2016年06月14日
-
- コマンド解説 (コマンドリファレンス) を追加しました。
- 2016年10月14日
-
- Certbot クライアントの動作環境 を追加しました。
-
Certbot クライアントの導入方法 を更新しました。
- 推奨されたインストール方法 を追加しました。
- Docker を使う方法 を更新しました。
- 2016年10月15日
-
- 推奨されたインストール方法 に ダウンロードした "certbot-auto" の検証 を追加しました。
- 2016年10月16日
-
-
証明書の取得方法 (プラグインの使い方) を更新しました。
- Authenticators と Installers についての詳しい解説を追加しました。
- ドメイン使用権の認証方法 (Challenges) に関する解説を追加しました。
- Nginx プラグイン のアルファ版が Certbot 0.9.0 に同梱されたため、情報を更新しました。
- サードパーティー製のプラグイン に10種類のプラグインの情報を追加しました。
-
証明書の取得方法 (プラグインの使い方) を更新しました。
- 2016年10月19日
-
- Certbot を再実行した場合の動作 を追加しました。
-
SSL/TLS サーバ証明書の更新 を更新しました。
- renew の使い方と更新の自動化 に、証明書の更新の自動化に役立つ情報を追加しました。
- 更新する証明書を限定する方法 を更新しました。
Certbot クライアントの動作環境
現在、Certbot クライアントは、Python 2.6 または 2.7 がインストールされている Unix 系の OS のみで動作します。将来的には、Python 3.x もサポートされる予定です。
Certbot クライアントは、下記の目的で root 権限を要求します。
/etc/letsencrypt
/var/log/letsencrypt
/var/lib/letsencrypt
に書き込むため。- Standalone プラグイン 使用時に、Port 80 と Port 443 をバインドするため。
- Apache プラグイン もしくは Nginx プラグイン の使用時に、ウェブサーバの設定を読み込み、書き換えるため。
上記のいずれにも該当しない場合には、理論上は Certbot クライアントを root 権限無しに動作させることが可能です。しかしながら、root 権限無しで ACME クライアントを使用したい場合には、Certbot クライアントではなく、letsencrypt-nosudo や simp_le を使用した方が良いケースが多いでしょう。
Apache プラグイン の動作には、Augeas Version 1.0 を搭載している OS が必要です。Debian・Fedora・SUSE・Gentoo・Darwin をベースにしているモダン OS が 対応 しています。
Certbot クライアントの導入方法
推奨されたインストール方法
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 の手順に従ってください。
ダウンロードした "certbot-auto" の検証
その他の UNIX 系 OS の手順に従って https://dl.eff.org/certbot-auto
から certbot-auto
スクリプトをダウンロードする際には、安全な HTTPS による通信が行われますが、スクリプトの実行前に完全性を二重にチェックしたい場合には、下記のコマンドでファイルを検証することができます。
wget -N https://dl.eff.org/certbot-auto.asc
gpg2 --recv-key A2CFB51FA275A7286234E7B24D17C995CD9775F2
gpg2 --trusted-key 4D17C995CD9775F2 --verify certbot-auto.asc certbot-auto
Docker を使う方法
Docker (英文) を使用することで、素早く簡単に SSL/TLS サーバ証明書を取得することができますが、この方法だと SSL/TLS サーバ証明書のインストールやウェブサーバの設定を行うことができません。何故ならば、Certbot クライアントの Installers(インストーラ)プラグインは、Docker のコンテナ内に到達することができないからです。
証明書を手動で管理する方法を知るために、SSL/TLS サーバ証明書の保存場所 を読むことをお勧めします。また、推奨された暗号スイート(ciphersuites)に関する情報 (英文) を提供しています。
よく分からない場合には OS のパッケージ や certbot-auto で、Installer(インストーラ)プラグインを使用する方法を強くお勧めします。
もし、どうしても Docker を使用したいという場合には、SSL/TLS サーバ証明書を取得するドメイン名を正引きしたIPアドレスのサーバ上で、Docker をインストール (英文) してから、次のコマンドを実行してください。
sudo docker run -it --rm -p 443:443 -p 80:80 --name certbot \
-v "/etc/letsencrypt:/etc/letsencrypt" \
-v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
quay.io/letsencrypt/letsencrypt:latest certonly
Certbot クライアントの certonly
コマンドは、SSL/TLS サーバ証明書を取得し、/etc/letsencrypt/live
ディレクトリに配置します。Docker の中からウェブサーバの設定を行うことはできないため、証明書のインストール(ウェブサーバの設定)は手動で行う必要があります。
/etc/letsencrypt
ディレクトリ内の構成については、SSL/TLS サーバ証明書の保存場所 をご覧ください。
ソースからインストールする方法
ソースからのインストールは、開発者に対してのみサポートされています。
詳しい情報は Developer Guide (英文) に記載されています。
注意事項
- ソースからのインストールに際して、
python setup.py install
やpython pip install .
は、使用しないでください。 - 仮想環境以外や、superuser 権限・root 権限の環境では、インストールコマンドを実行しないでください。例えば
sudo python setup.py install
sudo pip install
sudo ./venv/bin/...
のようなコマンドは、実行しないでください。
上記の操作を行うと OS 環境が破壊されることがあり、Certbot チームのサポートも受けられません。
パッケージング・ガイド
現在、多くの OS のパッケージへ収録されるよう尽力しています。
もし、Certbot クライアントを、あなたが選んだディストリビューションに収録させたい場合には Packaging Guide (英文) をお読みください。
証明書の取得方法 (プラグインの使い方)
Certbot クライアントは、いくつかの「プラグイン」に対応しています。プラグインは、SSL/TLS サーバ証明書を取得、またはインストールする際に使用します。
Authenticators(オーセンティケータ)
SSL/TLS サーバ証明書を取得するためのプラグインは、Authenticators(オーセンティケータ)と呼ばれており、 サブコマンド certonly
を指定して使用します。
Authenticators は、証明書の取得を申請しているドメイン名の管理権があるかどうかを検証するために必要な手順を実施して、証明書を取得します。取得した証明書は /etc/letsencrypt
ディレクトリに保存されます。
この種類のプラグインは、証明書の取得のみを行うため、サーバ(ウェブサーバなど)の設定に変更が加えられることはありません。
コマンドを実行する際に複数のドメイン名を指定した場合には、複数のドメイン名に対して有効な単一の証明書が発行されます。複数の独立した証明書を取得したい場合には、Certbot を複数回実行する必要があります。
※Authenticators(オーセンティケータ)は、下記の表において Auth が「Y」になっているプラグインです。
Installers(インストーラ)
SSL/TLS サーバ証明書をインストールするためのプラグイン(Apache などのサーバソフトウェアの設定を行うプラグイン)は、Installers(インストーラ)と呼ばれており、サブコマンド install
を指定して使用します。
Installers プラグインは、証明書を取得した後、ウェブサーバの設定に変更を加えることで、ウェブサイトを HTTPS に対応させます。
※Installers(インストーラ)は、下記の表において Inst が「Y」になっているプラグインです。
ドメイン使用権の認証方法 (Challenges)
プラグインは、証明書の取得を申請したドメイン名を管理下においていることを、ACME プロトコルにおける Challenges (英文) を使用して認証しています。
使用できる認証方法(ドメイン名を管理下においていることを証明する方法)は、次の通りです。
- http-01
- Port 80 (HTTP) を使用します。
- tls-sni-01
- Port 443 (HTTPS) を使用します。
- dns-01
-
Port 53 (DNS) を使用します。
DNS サーバにおける構成の変更(TXT レコードの変更)を必要とします。
通常の構成の場合、DNS サーバは、ウェブサーバとは別のマシンです。
Standalone プラグイン と Manual プラグイン は、複数の認証方法をサポートしています。その場合、--preferred-challenges
オプションで、認証方法を選択できます。
プラグインの使い方
プラグインは、デフォルトで certbot run
コマンドから使用することができます。
また、サブコマンド run
で、異なる「Authenticator プラグイン」と「Installers プラグイン」の組み合わせを指定することもできます。
プラグインの一覧表
これらのプラグインの他、サードパーティー製のプラグイン も利用できます。
Plugin | Auth | Inst | 説明 |
---|---|---|---|
apache | Y | Y |
SSL/TLS サーバ証明書の取得と、Apache 2.4 への証明書のインストール(Apache の設定ファイルの書き換え)を自動的に行います。
※Apache 2.4 が、パッケージ「libaugeas0」のバージョンが 1.0 以上の、Debian ベースのディストリビューション上で動作している必要があります。
※チャレンジタイプ: tls-sni-01 (Port 443)
|
webroot | Y | N |
動作中のウェブサーバのドキュメントルートディレクトリ以下に、ドメイン使用権者の認証用のファイルを自動的に設置することにより、SSL/TLS サーバ証明書の取得を行います。
※動作中の httpd(TCP Port 80 や TCP Port 443 など)のサービスを停止させる必要はありません。
※Certbot クライアントを、証明書を取得するドメイン名を運用しているウェブサーバ(DNSの正引きしたIPアドレスのウェブサーバ)で実行する必要があります。また、httpd が動作中である必要があります。
※チャレンジタイプ: http-01 (Port 80)
|
nginx | Y | Y |
SSL/TLS サーバ証明書を取得と、Nginx への証明書のインストール(Nginx 設定ファイルの書き換え)を自動的に行います。 Certbot 0.9.0 以降に、Nginx プラグインのアルファ版が同梱されています。 ※チャレンジタイプ: tls-sni-01 (Port 443)
|
standalone | Y | N |
SSL/TLS サーバ証明書の取得のみを行ないます。
※ドメイン使用権者の認証(Let's Encrypt のサーバから、証明書を取得するドメイン名を正引きしたIPアドレスに接続することによる認証)の際には、Certbot クライアントに内蔵されている簡易的なウェブサーバが機能が一時的に使われます。
※このプラグインは TCP Port 80 もしくは TCP Port 443 を使うため、当該 Port を Listen している動作中のウェブサーバを一時的に終了させる必要があります。
※当サイトのチュートリアル Let's Encrypt の使い方 では、このプラグインを使用した Let's Encrypt 導入方法を解説しています。
※チャレンジタイプ: http-01 (Port 80) もしくは tls-sni-01 (Port 443)
|
manual | Y | N |
ドメイン使用権者であることの認証を手動で行って、SSL/TLS サーバ証明書を取得します。
※指定された認証用のファイルを、証明書を取得するドメイン名を正引きしたIPアドレスのウェブサーバ上の所定の場所(ドキュメントルート以下)に手動で設置することにより、ドメイン使用権者であることを認証します。
※Certbot クライアントを SSL/TLS サーバ証明書を使用するウェブサーバ以外で実行することができます。ドメイン名を正引きしたIPアドレスの環境で実行する必要も、ウェブサーバを一時的に停止(サービスの停止)する必要もありません。
※チャレンジタイプ: http-01 (Port 80) もしくは dns-01 (Port 53)
|
Apache プラグイン
Apache 2.4 が、パッケージ「libaugeas0」のバージョンが 1.0 以上の、Debian ベースのディストリビューション上で動作している場合には、Apache プラグインを使用することができます。
このプラグインは、SSL/TLS サーバ証明書の取得と、Apache ウェブサーバへの証明書のインストール(Apache の設定)の両方を自動化します。
このプラグインを使用するには、コマンドラインにおいて --apache
を指定します。
Webroot プラグイン
Certbot クライアントを実行するコンピュータでウェブサーバ(httpd)が動作中であり、ウェブサーバを停止することなく SSL/TLS 証明書を発行したい場合には、Webroot プラグインをご利用ください。
Webroot プラグインは、コマンドラインオプションで certonly
と --webroot
を指定することで使用可能です。
このプラグインを使用する際には --webroot-path
もしくは -w
オプションで、Webサーバのドキュメントルートディレクトリ(ウェブサーバで公開するコンテンツが入っているディレクトリ)を指定する必要があります。
指定は --webroot-path /var/www/html
や --webroot-path /usr/share/nginx/html
のように行います。
複数のドメイン名に対する SSL/TLS サーバ証明書を一度に取得する場合には、ドメイン名ごとにドキュメントルートディレクトリが異なる場合があるため、それぞれのドメイン名に対するドキュメントルートディレクトリを指定する必要があります。
複数のドメイン名を指定した場合、それぞれのドメイン名に対して、最後に指定されたドキュメントルートディレクトリ --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 に対してはドキュメントルートディレクトリ /var/www/example/
が使用され、ドメイン名 other.example.net と another.other.example.net に対してはドキュメントルートディレクトリ /var/www/other
が使用されます。
Webroot プラグインは ${webroot-path}/.well-known/acme-challenge
に一時ファイル(ワンタイムトークン)を作成し、Let's Encrypt の認証サーバから HTTP リクエスト(名前解決には DNS のAレコードを使用)で取得することにより、認証を行います。
そのため、ウェブサーバには下記のようなアクセスログが残ります。
66.133.109.36 - - [05/Jan/2016:20:11:24 -0500] "GET /.well-known/acme-challenge/HGr8U1IeTW4kY_Z6UIyaakzOkyQgPr_7ArlLgtZE8SX HTTP/1.1" 200 87 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)"
※Webroot プラグインを使用する場合、Webサーバの設定が、隠しディレクトリ(ドット "." から始まる名前のディレクトリ名)内のファイルにインターネット経由でアクセスできるように構成されている必要があります。もし、ウェブサーバの設定によって /.well-known
に対して特別な扱いがされている場合には、/.well-known/acme-challenge
内のファイルに外部からアクセス可能にするために設定を変更する必要があるかもしれません。
※複数のドメイン名に対応するサーバ証明書には、サブジェクトの代替名(SAN : Subject Alternative Name)という仕組みが用いられています。詳しくは 1枚で複数のドメイン名に対応する証明書は発行できますか? をご覧ください。
Nginx プラグイン
Nginx プラグインは、Cerbot のバージョン 0.9.0 以上に同梱されており、多くの構成において動作します。
現時点ではアルファ版であるため、使用する前に Nginx 設定ファイルをバックアップすることを推奨します。certbot --nginx rollback
コマンドでも、Nginx プラグインによって書き換えられた Nginx の設定を復元することができます。
コマンドラインオプションで --nginx
を指定することで、このプラグインを使用できます。
certbot --nginx
Standalone プラグイン
ドメイン使用権者の認証に Certbot クライアントに内蔵されているウェブサーバを使いたい場合には、コマンドラインで certonly
と --standalone
を指定して、Standalone プラグインを使用します。
このプラグインは、ドメイン認証のために TCP Port 80 もしくは TCP Port 443 をバインドするので、既に起動しているウェブサーバ(Apache など)を一時的に終了させる必要があります。
どちらのポートを使用するのかは、下記のコマンドラインオプションのうちの1つを入力することで、指定できます。
- TCP Port 80 を使用する場合
--standalone-supported-challenges http-01
を指定します。 - TCP Port 443 を使用する場合
--standalone-supported-challenges tls-sni-01
を指定します。
Standalone プラグインは、Certbot クライアントを実行するマシンのサーバソフトウェアに依存していません。しかしながら、インターネットからの証明書を取得するドメイン名に対するインバウンドコネクションを受け入れるようルータやファイアウォールが構成されている必要があります。
Manual プラグイン
certbot
を SSL/TLS サーバ証明書を運用するマシン以外で実行したい場合や、ドメイン使用権者の認証ステップを手動で行いたい場合には、Manual プラグインを使用します。
このプラグインを使用して SSL/TLS サーバ証明書を取得するには、certbot
に certonly
と --manual
をコマンドラインオプションとして指定します。
UI が隠れている場合でも証明書の取得が可能ですが、他の端末のセッションに対してコマンドをコピー・アンド・ペーストできる必要があります。
サードパーティー製のプラグイン
ほかの開発者によって作成された Certbot クライアント用のサードパーティー製のプラグインもあります。
多くはベータ版や実験段階ですが、いくつかは既に広く使われています。
Plugin | Auth | Inst | 説明 |
---|---|---|---|
plesk | Y | Y | Plesk ウェブホスティングツール用 |
haproxy | Y | Y | HAProxy ロードバランサー用 |
s3front | Y | Y | Amazon CloudFront ディストリビューション(S3 バケット)用 |
gandi | Y | Y | Gandi のホスティングサービスと API 用 |
varnish | Y | N | Varnish サーバを通じて証明書を取得する |
external | Y | N | スクリプト作成の利便性を高める(ticket 2782 を参照) |
icecast | N | Y | Icecast 2 ストリーミングメディアサーバに証明書を設置する |
pritunl | N | Y | 分散型 OpenVPN サーバの pritunl に証明書をインストールする |
proxmox | N | Y | Proxmox 仮想サーバに証明書をインストールする |
postfix | N | Y | Postfix / Exim 用(STARTTLS Everywhere) |
もし興味があったら、プラグインを自作する (英文) ことも可能です。
Certbot を再実行した場合の動作
Certbot を、サブコマンド certonly
もしくは run
(サブコマンドを省略した場合も含む)を付けて実行した場合には、同じドメイン名の証明書が既に作成済みである場合であっても、新しい証明書を1枚作成するリクエストが行われます。
※サブコマンドを省略した場合には、サブコマンド run
が指定されたものとみなされます。そのため、サブコマンドを指定しない場合にも同様の動作となります。
この際の動作は、オプション --force-renewal
, --duplicate
, --expand
により変更できます。左記のオプションを指定しない場合には、意図を尋ねる確認メッセージが表示される場合があるため、cron
を使用した自動化の際には注意が必要です。
--force-renewal オプション
過去に取得した証明書を、残りの有効期間に関わらず更新したい場合に有効なオプションです。
--force-renewal
オプションを付けた場合、過去に取得済みの証明書と同じドメイン名の組み合わせの証明書を取得しようとしている場合にも、強制的に新しい証明書を取得します。その際には、証明書の発行先のドメイン名を -d DOMAIN
ですべて指定する必要があります。
証明書の取得に成功すると、新しい証明書が過去に作成した同じドメイン名の証明書と同一のディレクトリに保存され、live
ディレクトリのシンボリックリンクのリンク先が新しい証明書に変更されます。
--duplicate オプション
--duplicate
オプションを付けた場合、過去に取得済みの証明書と同じドメイン名の組み合わせで証明書を取得しようとした際に、完全に独立した新しい証明書として証明書の取得を行います。取得した証明書は、過去に取得した証明書と完全に分かれて保存されます。
このオプションの動作は、多くのユーザーにとって望ましくないものです。
--expand オプション
--expand
オプションを付けた場合、取得済みの証明書を、過去に取得したすべてのドメイン名と新たに追加するドメイン名(複数可)に対して有効な証明書に更新します。
--allow-subset-of-names オプション
--allow-subset-of-names
オプションを付けた場合、複数のドメイン名に有効な証明書の発行を要求した際に、いくつかのドメイン名についてドメイン使用権者の認証に失敗した場合でも、認証に成功したドメイン名のみの組み合わせに対して有効な証明書を取得します。
いくつかのドメイン名が、そのシステムで使われなくなった場合に便利なオプションです。
上記のオプションについての詳細情報
- --force-renewal オプション (コマンド解説)
- --duplicate オプション (コマンド解説)
- --expand オプション (コマンド解説)
- --allow-subset-of-names オプション (コマンド解説)
過去に取得した証明書について
どのオプションで新しい証明書を新規取得または更新した場合であっても、過去に取得した証明書ファイルの実体が、上書きされたり削除されたりすることはありません。新しく取得・更新した証明書は、別のファイルとして保存されます。過去に取得した証明書の有効期限が切れている場合も同様です(期限切れの証明書が自動的に削除されることはありません)。
ただし、証明書の更新時には、live
ディレクトリにあるシンボリックリンクのリンク先が、新しい証明書に変更されます(--duplicate オプション 指定時は除く)。
一定時間内の証明書の取得数制限(レート制限)について
Rate Limits - Let's Encrypt (英文) をご覧ください。
renew サブコマンドについて
renew
サブコマンドを使用して証明書を更新することもできます。certbot renew
を実行すると、すべての現存の証明書に対して、有効期限が近いかどうかの調査が行われます。有効期限が迫っている証明書があった場合、当該のドメイン名の組み合わせに対して有効な新しい証明書を取得します。
certonly
とは異なり、renew
は管理下にあるすべての証明書に対して作用するため、システムで管理している証明書を適切な時期に更新する作業を自動化したい場合に最適です。
certbot renew
を実行した場合は、有効期限が近い証明書のみを更新し、十分に有効期間が残っている証明書は更新されないため、Let's Encrypt 認証局のレート制限 (英文) に引っかかってしまうリスクは最小限に抑えられます。そのため、好きな頻度で certbot renew
コマンドを実行することができます(毎日 cron
で実行しても構いません)。
詳しい情報については、次のセクション SSL/TLS サーバ証明書の更新 をご覧ください。
SSL/TLS サーバ証明書の更新
Let's Encrypt 認証局が発行する SSL/TLS サーバ証明書の有効期間は、短期間(90日間)です。
少なくとも、3か月に一回は、証明書を更新する必要があります。
renew の使い方と更新の自動化
Certbot クライアントは、有効期限が近付いている証明書をチェックして、新しい証明書に更新するサブコマンド renew
をサポートしています。使い方は簡単で、下記コマンドを入力するだけです。
certbot renew
※OS のパッケージ管理システム以外から certbot-auto
をダウンロードした場合には、上記コマンドの certbot
を /path/to/certbot-auto
( /path/to/
には実際のパスを入力)に置き換えてください。
上記のコマンドを実行すると、過去に取得した証明書のうち、有効期間の残りが30日未満の証明書が更新されます。更新の際には、プラグインやオプションを明示的に指定した場合を除き、証明書を発行した際に使用したプラグインとオプションが使用されます。
証明書の更新の前後に、シェル・コマンド(hook)を実行させることもできます。例えば、過去に Standalone プラグイン で取得した証明書が1枚有る場合、certbot renew
実行時にもデフォルトで同じプラグインが使用されます。その場合、証明書を更新するために、次のようなコマンドを入力するとよいでしょう。
certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"
上記のコマンドを入力すると、稼働中の nginx(ウェブサーバ)を停止させてから証明書の更新が行われます(Standalone プラグイン が必要なポートをバインドするため)。証明書の更新後は、nginx が再起動します。
シェル・コマンド(hook)は、証明書を更新する必要がある場合(証明書の有効期間の残りが30日未満の場合)にのみ実行されるため、上記のコマンドを頻繁に自動実行した場合にも、ウェブサーバの再起動が頻繁に行われることはありません。
より詳しい情報については サブコマンド "renew" のオプション をご覧ください。
コマンドが人間の介入無しで正常に実行されることを確認したら、crontab
に追加して使用することができます。証明書の更新が行われるのは有効期間の残りが少ない証明書(デフォルトでは残り30日未満)のみなので、定期的(毎日、毎週など)に certbot renew
が実行されるように設定していただいて構いません。
もし、更新時のログを出力したくない場合には、-q
もしくは --quiet
フラグを付けてください。その場合にも、エラー発生時にはログが出力されます。
certbot renew
に --force-renew
フラグを付けて実行することで、証明書の有効期限の残りを無視して、過去に発行したすべての証明書を強制的に更新することができます。ただし、すべての証明書の強制更新を毎日行うことは適切ではなく、Let's Encrypt 認証局のレート制限 に引っかかってしまう恐れがあります。
certbot renew
にオプションを付けて実行した場合、更新が行われるすべての証明書に対して適用されます。例えば、certbot renew --rsa-key-size 4096
を実行した場合、すべての有効期限が近い証明書が、4096 bit の RSA 公開鍵が使用された新しい証明書に更新されます。
もし、指定したオプションで証明書の更新が正常に行われた場合には、それらのオプションは保存され、将来それらの証明書を更新する際に使用されます。
更新する証明書を限定する方法
更新する証明書を限定したい場合(現存のすべての証明書を更新対象にするのではなく、指定した1枚の証明書のみを更新したい場合)には、certbot renew
コマンドを使用することはできません。
代わりに、-d
フラグで証明書が有効なドメイン名(複数指定した場合には サブジェクトの代替名 として扱われます)を指定した certbot certonly
コマンドを実行します。その際に、ユーザーからの入力が要求されることのないよう -n
もしくは --noninteractive
フラグを指定するとよいでしょう(このフラグは cron
からコマンドを自動実行する場合に使用すると便利です)。
certbot certonly -n -d example.com -d www.example.com
新しい証明書を取得するのではなく、古い証明書を更新された証明書に置き換えるためには、証明書がカバーするすべてのドメイン名・サブドメイン名を指定する必要があることにご注意ください(www.
付きのドメイン名も忘れないようにしてください)。異なるドメイン名の集合が指定された場合、古い証明書が置き換えられるのではなく、指定されたドメイン名のみに有効な新しい証明書が取得されます。
※ certbot certonly
を使用した場合、指定された1枚の証明書のみが更新されます。
Email による有効期限の通知
Let's Encrypt 認証局は、証明書の有効期限が近くなっても証明書が更新されていない場合に、通知の Email を送信します。
Certbot コマンドラインオプション
Certbot クライアントは、多くのコマンドラインオプションをサポートしています。
詳しくは、下記のページをご覧ください(Certbot クライアントで使用可能なすべてのコマンド・サブコマンド・オプションの解説が掲載されています)。
SSL/TLS サーバ証明書の保存場所
Apache や nginx の Installers(インストーラ)プラグインを使用して SSL/TLS サーバ証明書の管理を自動化することを推奨しておりますが、手動で SSL/TLS サーバ証明書の管理を行いたい場合には、下記の必要なファイルの探し方についての情報を参考にしてください。
全ての生成された暗号鍵(公開鍵および秘密鍵)と発行された SSL/TLS サーバ証明書に対するシンボリックリンクは /etc/letsencrypt/live/$domain
に作成されます。
これらのファイルをコピーするのではなく、上記のシンボリックリンクをサーバソフトウェア(ウェブサーバなど)の設定ファイルにて直接指定することをお勧めします。
証明書の更新時には /etc/letsencrypt/live
内のシンボリックリンクは、最新の暗号鍵・証明書へリンクするように自動的に書き変わります。
※過去に Certbot クライアントで発行した全ての暗号鍵・SSL/TLS サーバ証明書(更新前・有効期限切れを含む)の実体は、 /etc/letsencrypt/archive
と /etc/letsencrypt/keys
に保管されています。
※/etc/letsencrypt/live
は、最新の暗号鍵・証明書に対するシンボリックリンクです。
利用可能なファイルは、下記の通りです。
privkey.pem
-
SSL/TLS サーバ証明書の公開鍵に対応する 秘密鍵 です。
Apache 設定ファイルの SSLCertificateKeyFile や、nginx の ssl_certificate_key で指定します。
※秘密鍵は、漏洩しないように保管する必要があります。
※他の誰かと秘密鍵を共有しないでください。Let's Encrypt の開発者にも渡さないでください。
※SSL/TLS の動作のためには、サーバ(Apache など)がこの秘密鍵ファイルにアクセスできる必要があります。
従って、安全のために秘密鍵を金庫の中のみで保管するといった運用はできません。 cert.pem
-
SSL/TLS サーバ証明書(公開鍵を含む)です。サーバの証明書のみで、中間証明書などは含みません。
これは、Apache 2.4.8 未満 で使用するファイルで SSLCertificateFile として指定します。
chain.pem
-
アクセス時にブラウザに提供する必要のある中間証明書です。
SSL/TLS サーバ証明書(cert.pem の内容)は含まれていません。
これは、Apache 2.4.8 未満 で使用するファイルで SSLCertificateChainFile として指定します。
fullchain.pem
-
SSL/TLS サーバ証明書(公開鍵を含む)と中間証明書の両方が含まれているファイルで、
cert.pem
とchain.pem
の内容が結合されたものです。これは、Apache 2.4.8 以上 や nginx で使用するファイルです。
Apache 2.4.8 以上の場合は SSLCertificateFile、nginx では ssl_certificate において、このファイルを指定します。
証明書は、ルート証明書(プライマリ証明書)から下層へとたどる構造となっています。
必ず chain.pem
か fullchain.pem
のどちらかを使用する必要があることに注意してください。
もし、ウェブサーバに cert.pem
のみを設定した場合には、ブラウザにおいて証明書に関するエラーが発生します。
※上記の全てのファイルは、拡張子からも分かるように PEM エンコードされています。もし、DER や PFX などの他の形式のファイルが必要な場合には openssl
を使用して変換する必要があります。変換が必要な場合には、Certbot クライアント による SSL/TLS サーバ証明書の自動更新 はできません。
Certbot クライアント 設定ファイル
Certbot クライアントの設定ファイルは certbot-auto --config cli.ini
(省略形は -c cli.ini
)のように指定することができます。
下記は、設定ファイルの内容の例です。
# This is an example of the kind of things you can do in a configuration file.
# All flags used by the client can be configured here. Run Certbot with
# "--help" to learn more about the available options.
# Use a 4096 bit RSA key instead of 2048
rsa-key-size = 4096
# Uncomment and update to register with the specified e-mail address
# email = foo@example.com
# Uncomment and update to generate certificates for the specified
# domains.
# domains = example.com, www.example.com
# Uncomment to use a text interface instead of ncurses
# text = True
# Uncomment to use the standalone authenticator on port 443
# authenticator = standalone
# standalone-supported-challenges = tls-sni-01
# Uncomment to use the webroot authenticator. Replace webroot-path with the
# path to the public_html / webroot folder being served by your web server.
# authenticator = webroot
# webroot-path = /usr/share/nginx/html
デフォルトでは、下記のディレクトリの「Certbot クライアント設定ファイル」が検索されます。
/etc/letsencrypt/cli.ini
$XDG_CONFIG_HOME/letsencrypt/cli.ini
(ただし$XDG_CONFIG_HOME
がセットされていない場合には、~/.config/letsencrypt/cli.ini
)
助けを借りる方法
何か困ったことがある場合には、IRC (#certbot @ OFTC) (英文) ・ IRC (#letsencrypt @ freenode) または Let's Encrypt Forums (英文) で助けを借りることができます。
ソフトウェアのバグを発見した場合には、できる限り多くの情報を添えて、Issue Tracker (英文) までご報告ください。
- 入力したコマンド(オプションを含む)と、出力のコピー・アンド・ペースト(メールアドレスやドメイン名などの個人情報が含まれることがあります)
/var/log/letsencrypt
のコピー・アンド・ペースト(同様に個人情報が含まれることがあります)certbot --version
の実行結果- 使用している OS とそのバージョン
- 選んだ Certbot クライアントのインストール方法
- スポンサーリンク
翻訳記事の出典と留意事項
この「Let's Encrypt ユーザーガイド」は、下記ページの全文を和訳した上で、補足説明などを加えたものです。