「Certbot」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(日本のwikipediaへのリンクに修正)
(翻訳)
2行目: 2行目:
 
[[Category:セキュリティ]]
 
[[Category:セキュリティ]]
 
[[en:Let’s Encrypt]]
 
[[en:Let’s Encrypt]]
[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''' という名前で、コマンドラインから有効な SSL 証明書を取得できます。また、手動で CSR 作成を行うミニマルなクライアントを {{AUR|acme-tiny}} でインストールすることができます。スクリプトで使用するのに適したクライアントとして {{AUR|simp_le-git}} や {{AUR|letsencrypt-cli}} も存在します。
   
{{Note|以前 ''Let’s Encrypt client'' と呼ばれていた公式クライアントは、現在 ''Certbot'' と呼ばれています。}}
+
{{Note|以前 ''Let’s Encrypt クライアント''と呼ばれていた公式クライアントは、現在 ''Certbot'' と呼ばれています。}}
   
 
== Certbot ==
 
== Certbot ==
37行目: 37行目:
 
==== Webroot ====
 
==== Webroot ====
 
 
webroot を使う場合は、{{ic|yourdomain.tld/.well-known/acme-challenge/}} でチャレンジ/レスポンス認証ます。ウェブサーバー (例: Apache/nginx) を止めることなく証明書を取得・更新できます
+
webroot の方法では、{{ic|yourdomain.tld/.well-known/acme-challenge/}} でチャレンジ/レスポンス認証われます。ウェブサーバー (例: Apache/nginx) を止めることなく証明書を取得・更新できます:
   
 
# certbot certonly --email ''email@example.com'' --webroot -w ''/path/to/html/'' -d ''your.domain''
 
# certbot certonly --email ''email@example.com'' --webroot -w ''/path/to/html/'' -d ''your.domain''
43行目: 43行目:
 
サーバーの設定で {{ic|/etc/letsencrypt/live/''your.domain''/}} の証明書を使うようにしてください。
 
サーバーの設定で {{ic|/etc/letsencrypt/live/''your.domain''/}} の証明書を使うようにしてください。
   
===== Multiple domains =====
+
===== マルチドメイン =====
   
  +
複数のドメインあるいはサブドメインを使用する場合、全てのドメインに対して webroot を指定する必要があります。別の webroot を指定しないと、既存の webroot が使われます。
If you use more than one domain or subdomains, the webroot has to be given for every domain. If no new webroot is given, the previous is taken.
 
   
  +
{{ic|/.well-known/acme-challenge/}} への http リクエストを全て一つのフォルダ (例: {{ic|/var/lib/letsencrypt}}) にまとめることで、マルチドメインの管理がとても楽になります。nginx ならば、証明書を作成したいサイトの server ブロックの中に以下の location ブロックを記述します:
Management of this can be made much easier, if you map all http requests for {{ic|/.well-known/acme-challenge/}} to a single folder, e.g. {{ic|/var/lib/letsencrypt}}.
 
For nginx you can achieve this by placing this location block within server blocks of sites you want to request certificates for:
 
 
{{bc|<nowiki>
 
{{bc|<nowiki>
 
location /.well-known/acme-challenge {
 
location /.well-known/acme-challenge {
56行目: 55行目:
 
}
 
}
 
</nowiki>}}
 
</nowiki>}}
For Apache you can achieve this by creating the file {{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>
 
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
 
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
65行目: 64行目:
 
</Directory>
 
</Directory>
 
</nowiki>}}
 
</nowiki>}}
and including it in {{ic|httpd.conf}}:
+
そして {{ic|httpd.conf}} で上記ファイルをインクルードします:
 
{{hc|/etc/httpd/conf/httpd.conf|<nowiki>
 
{{hc|/etc/httpd/conf/httpd.conf|<nowiki>
 
Include conf/extra/httpd-acme.conf
 
Include conf/extra/httpd-acme.conf
 
</nowiki>}}
 
</nowiki>}}
The chosen path has then to be writable for the chosen letsencrypt client. It also has to be readable by the web server; you can achieve this thereby : {{ic|chgrp http /var/lib/letsencrypt && chmod g+s /var/lib/letsencrypt}}.
+
letsencrypt クライアントのパスから設定したパスに書き込めるように、また、ウェブサーバーから読み込めるようにする必要があります。次のコマンドを実行してください: {{ic|# chgrp http /var/lib/letsencrypt && chmod g+s /var/lib/letsencrypt}}
   
 
===== 自動更新 =====
 
===== 自動更新 =====
87行目: 86行目:
 
[[systemd/タイマー|タイマー]]を追加する前に、サービスが正しく動作すること、何も入力が要求されないことを確認してください。
 
[[systemd/タイマー|タイマー]]を追加する前に、サービスが正しく動作すること、何も入力が要求されないことを確認してください。
   
それから、タイマーを追加することで毎月証明書を更新できます。
+
それから、タイマーを追加することで証明書を更新できます (更新の必要がない証明書は自動的にスキップされます)
   
 
{{hc|1=/etc/systemd/system/certbot.timer|
 
{{hc|1=/etc/systemd/system/certbot.timer|
 
2=[Unit]
 
2=[Unit]
Description=Monthly renewal of Let's Encrypt's certificates
+
Description=Daily renewal of Let's Encrypt's certificates
   
 
[Timer]
 
[Timer]
OnCalendar=monthly
+
OnCalendar=daily
 
Persistent=true
 
Persistent=true
   
100行目: 99行目:
 
WantedBy=timers.target}}
 
WantedBy=timers.target}}
   
{{ic|certbot.timer}} を[[起動]]・[[有効化]]してください。また、証明書をいますぐ更新したい場合は {{ic|certbot.service}} を[[起動]]してください。
+
{{ic|certbot.timer}} を[[起動]]・[[有効化]]してください。
   
 
証明書を更新するたびにウェブサーバーを再起動させることもできます。{{ic|certbot.service}} ファイルに以下のどちらかの行を追加してください:
 
証明書を更新するたびにウェブサーバーを再起動させることもできます。{{ic|certbot.service}} ファイルに以下のどちらかの行を追加してください:
   
* Apache: {{ic|1=ExecStartPost=/usr/sbin/systemctl restart httpd.service}}
+
* Apache: {{ic|1=ExecStartPost=/bin/systemctl reload httpd.service}}
* nginx: {{ic|1=ExecStartPost=/usr/sbin/systemctl restart nginx.service}}
+
* nginx: {{ic|1=ExecStartPost=/bin/systemctl reload nginx.service}}
   
 
== 参照 ==
 
== 参照 ==

2016年6月16日 (木) 23:21時点における版

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

公式クライアントは Certbot という名前で、コマンドラインから有効な SSL 証明書を取得できます。また、手動で 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 ならば、証明書を作成したいサイトの server ブロックの中に以下の location ブロックを記述します:

location /.well-known/acme-challenge {
    root /var/lib/letsencrypt;
    default_type "text/plain";
    try_files $uri =404;
}

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

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

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

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

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

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

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

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

参照