「Certbot」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎自動更新: Serviceカラム名を追加)
(同期)
4行目: 4行目:
 
[https://letsencrypt.org/ Let’s Encrypt] はフリーかつ自動化されたオープンな認証局です。[[Wikipedia:ja:Automated Certificate Management Environment|ACME]] プロトコルを利用しています。
 
[https://letsencrypt.org/ Let’s Encrypt] はフリーかつ自動化されたオープンな認証局です。[[Wikipedia:ja:Automated Certificate Management Environment|ACME]] プロトコルを利用しています。
   
公式クライアントは '''Certbot''' という名前で、コマンドラインから有効な SSL 証明書を取得できます。また、手動で CSR 作成を行うミニマルなクライアントを {{AUR|acme-tiny}} でインストールすることができます。スクリプトで使用するのに適したクライアントとして {{AUR|simp_le-git}} や {{AUR|letsencrypt-cli}} も存在します。
+
公式クライアントは '''Certbot''' という名前で、コマンドラインから有効な X.509 証明書を取得できます。また、手動で CSR 作成を行うミニマルなクライアントを {{AUR|acme-tiny}} でインストールすることができます。スクリプトで使用するのに適したクライアントとして {{AUR|simp_le-git}} や {{AUR|letsencrypt-cli}} も存在します。
   
 
{{Note|以前 ''Let’s Encrypt クライアント''と呼ばれていた公式クライアントは、現在 ''Certbot'' と呼ばれています。}}
 
{{Note|以前 ''Let’s Encrypt クライアント''と呼ばれていた公式クライアントは、現在 ''Certbot'' と呼ばれています。}}
47行目: 47行目:
 
複数のドメインあるいはサブドメインを使用する場合、全てのドメインに対して webroot を指定する必要があります。別の webroot を指定しないと、既存の webroot が使われます。
 
複数のドメインあるいはサブドメインを使用する場合、全てのドメインに対して webroot を指定する必要があります。別の webroot を指定しないと、既存の webroot が使われます。
   
{{ic|/.well-known/acme-challenge/}} への http リクエストを全て一つのフォルダ (例: {{ic|/var/lib/letsencrypt}}) にまとめることで、マルチドメインの管理がとても楽になります。nginx ならば、証明書を作成したいサイトの server ブロックの中に以下の location ブロック記述します:
+
{{ic|/.well-known/acme-challenge/}} への http リクエストを全て一つのフォルダ (例: {{ic|/var/lib/letsencrypt}}) にまとめることで、マルチドメインの管理がとても楽になります。nginx ならば、以下のようなファイル作成:
{{bc|<nowiki>
+
{{hc|/etc/nginx/letsencrypt.conf|<nowiki>
location /.well-known/acme-challenge {
+
location ^~ /.well-known/acme-challenge {
root /var/lib/letsencrypt;
+
alias /var/lib/letsencrypt/.well-known/acme-challenge;
 
default_type "text/plain";
 
default_type "text/plain";
 
try_files $uri =404;
 
try_files $uri =404;
 
}
 
}
 
</nowiki>}}
 
</nowiki>}}
  +
そして証明書を作成したいサイトの server ブロックの中に以下のように記述します:
  +
{{hc|/etc/nginx/servers/example.com.conf|<nowiki>
  +
server {
  +
...
  +
  +
include letsencrypt.conf;
  +
}
  +
</nowiki>}}
  +
 
Apache の場合、{{ic|httpd-acme.conf}} ファイルを作成してください:
 
Apache の場合、{{ic|httpd-acme.conf}} ファイルを作成してください:
 
{{hc|/etc/httpd/conf/extra/httpd-acme.conf|<nowiki>
 
{{hc|/etc/httpd/conf/extra/httpd-acme.conf|<nowiki>
74行目: 83行目:
 
{{ic|certbot certonly}} を実行するとき、Certbot はドメインと webroot ディレクトリを {{ic|/etc/letsencrypt/renewal}} に記録します。次回からは {{ic|certbot renew}} を実行することで証明書を自動更新することができます。
 
{{ic|certbot certonly}} を実行するとき、Certbot はドメインと webroot ディレクトリを {{ic|/etc/letsencrypt/renewal}} に記録します。次回からは {{ic|certbot renew}} を実行することで証明書を自動更新することができます。
   
====== Service ======
+
====== サービス ======
 
以下の {{ic|.service}} ファイルを作成することで完全に自動化することが可能です:
 
以下の {{ic|.service}} ファイルを作成することで完全に自動化することが可能です:
   
83行目: 92行目:
 
[Service]
 
[Service]
 
Type=oneshot
 
Type=oneshot
ExecStart=/usr/bin/certbot renew}}
+
ExecStart=/usr/bin/certbot renew --quiet --agree-tos}}
   
====== Standonly service ======
+
====== Standalone サービス ======
  +
Standalone プラグインを使用する場合は更新リクエストを実行する前にウェブサーバーを停止させて、更新が完了してからウェブサーバーを再起動するようにします。Certbot のフックを使ってください。
When using the standalone method you'll want to stop your webserver before executing the renew request and start your webserver when certbot is finished, luckily certbot provides some hooks that do just that.
 
   
 
'''Nginx'''
 
'''Nginx'''
118行目: 127行目:
 
[Timer]
 
[Timer]
 
OnCalendar=daily
 
OnCalendar=daily
  +
RandomizedDelaySec=1day
 
Persistent=true
 
Persistent=true
   
125行目: 135行目:
 
{{ic|certbot.timer}} を[[起動]]・[[有効化]]してください。
 
{{ic|certbot.timer}} を[[起動]]・[[有効化]]してください。
   
証明書を更新するたびにウェブサーバーを再起動させるきます。{{ic|certbot.service}} ファイルに以下のどちらかの行を追加してください:
+
証明書を更新するたびにウェブサーバーを再起動させると良いしょう。{{ic|certbot.service}} ファイルに以下のどちらかの行を追加してください:
   
 
* Apache: {{ic|1=ExecStartPost=/bin/systemctl reload httpd.service}}
 
* Apache: {{ic|1=ExecStartPost=/bin/systemctl reload httpd.service}}
132行目: 142行目:
 
== 参照 ==
 
== 参照 ==
   
* [https://community.letsencrypt.org/t/list-of-client-implementations/2103 ACME クライアントの一覧]
+
* [https://letsencrypt.org/docs/client-options/ ACME クライアントの一覧]

2016年9月15日 (木) 23:23時点における版

Let’s Encrypt はフリーかつ自動化されたオープンな認証局です。ACME プロトコルを利用しています。

公式クライアントは Certbot という名前で、コマンドラインから有効な X.509 証明書を取得できます。また、手動で CSR 作成を行うミニマルなクライアントを acme-tinyAUR でインストールすることができます。スクリプトで使用するのに適したクライアントとして simp_le-gitAURletsencrypt-cliAUR も存在します。

ノート: 以前 Let’s Encrypt クライアントと呼ばれていた公式クライアントは、現在 Certbot と呼ばれています。

Certbot

Certbot は公式のリファレンスクライアントです。Python で書かれており、証明書を取得するためのコマンドラインツールを提供します。

インストール

certbot パッケージをインストールしてください。

公式クライアントを用いて発行された証明書はプラグインを使ってウェブサーバーに自動的に設定・インストールできます:

  • Nginx 用の実験的なプラグインは certbot-nginx パッケージに入っています。
  • certbot-apache パッケージも存在していますが、Apache HTTP Server を使っている場合の自動インストールは現在 Debian の派生ディストリビューションでしかサポートされていません。

設定

証明を作成・インストールする方法は Certbot のドキュメント を参照してください。

手動

ノート: この方法では、一時的にウェブサーバーを停止する必要があります。#Webroot の方法ではウェブサーバーを実行しながらでも認証が行えます。

ウェブサーバーのプラグインが存在しない場合、次のコマンドを使って下さい:

# certbot certonly --manual

上記のコマンドで自動的にドメインが認証されて秘密鍵と証明書のペアが作成されます。秘密鍵と証明書は /etc/letsencrypt/live/your.domain/ に保存されます。

上記のディレクトリに入っている秘密鍵と証明書を使用するように手動でウェブサーバーを設定します。

Webroot

webroot の方法では、yourdomain.tld/.well-known/acme-challenge/ でチャレンジ/レスポンス認証が行われます。ウェブサーバー (例: Apache/nginx) を止めることなく証明書を取得・更新できます:

# certbot certonly --email email@example.com --webroot -w /path/to/html/ -d your.domain

サーバーの設定で /etc/letsencrypt/live/your.domain/ の証明書を使うようにしてください。

マルチドメイン

複数のドメインあるいはサブドメインを使用する場合、全てのドメインに対して webroot を指定する必要があります。別の webroot を指定しないと、既存の webroot が使われます。

/.well-known/acme-challenge/ への http リクエストを全て一つのフォルダ (例: /var/lib/letsencrypt) にまとめることで、マルチドメインの管理がとても楽になります。nginx ならば、以下のようなファイルを作成:

/etc/nginx/letsencrypt.conf
location ^~ /.well-known/acme-challenge {
    alias /var/lib/letsencrypt/.well-known/acme-challenge;
    default_type "text/plain";
    try_files $uri =404;
}

そして証明書を作成したいサイトの server ブロックの中に以下のように記述します:

/etc/nginx/servers/example.com.conf
server {
    ...

    include letsencrypt.conf;
}

Apache の場合、httpd-acme.conf ファイルを作成してください:

/etc/httpd/conf/extra/httpd-acme.conf
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

そして httpd.conf で上記ファイルをインクルードします:

/etc/httpd/conf/httpd.conf
Include conf/extra/httpd-acme.conf

letsencrypt クライアントのパスから設定したパスに書き込めるように、また、ウェブサーバーから読み込めるようにする必要があります。次のコマンドを実行してください: # chgrp http /var/lib/letsencrypt && chmod g+s /var/lib/letsencrypt

自動更新

certbot certonly を実行するとき、Certbot はドメインと webroot ディレクトリを /etc/letsencrypt/renewal に記録します。次回からは certbot renew を実行することで証明書を自動更新することができます。

サービス

以下の .service ファイルを作成することで完全に自動化することが可能です:

/etc/systemd/system/certbot.service
[Unit]
Description=Let's Encrypt renewal

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --agree-tos
Standalone サービス

Standalone プラグインを使用する場合は更新リクエストを実行する前にウェブサーバーを停止させて、更新が完了してからウェブサーバーを再起動するようにします。Certbot のフックを使ってください。

Nginx

/etc/systemd/system/certbot.service
[Unit]
Description=Let's Encrypt renewal

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --pre-hook "/usr/bin/systemctl stop nginx.service" --post-hook "/usr/bin/systemctl start nginx.service" --quiet --agree-tos

Apache

/etc/systemd/system/certbot.service
[Unit]
Description=Let's Encrypt renewal

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --pre-hook "/usr/bin/systemctl stop httpd.service" --post-hook "/usr/bin/systemctl start httpd.service" --quiet --agree-tos
自動更新タイマー

タイマーを追加する前に、サービスが正しく動作すること、何も入力が要求されないことを確認してください。

それから、タイマーを追加することで証明書を更新できます (更新の必要がない証明書は自動的にスキップされます)。

/etc/systemd/system/certbot.timer
[Unit]
Description=Daily renewal of Let's Encrypt's certificates

[Timer]
OnCalendar=daily
RandomizedDelaySec=1day
Persistent=true

[Install]
WantedBy=timers.target

certbot.timer起動有効化してください。

証明書を更新するたびにウェブサーバーを再起動させると良いでしょう。certbot.service ファイルに以下のどちらかの行を追加してください:

  • Apache: ExecStartPost=/bin/systemctl reload httpd.service
  • nginx: ExecStartPost=/bin/systemctl reload nginx.service

参照