rabbit-slide-znz-debian-certbot 2016.12.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 39d320447dc524666f0d76d4d1c243e26f992707
4
+ data.tar.gz: 40ef1520a2716b4539be67a09da562179c82a5c0
5
+ SHA512:
6
+ metadata.gz: '008382a6b5251b72f5ef9e7a7de418bd46b493e296e477078c847730a8cc2e8c9949f31558914497f2fdd513188ca1bb1bc7b7e3bfd6235c41853c96e48a1e98'
7
+ data.tar.gz: 86c14a93bfe19e047cd315f952f88f25fb43a56be3bd4c99e3c30d0b504bb9a49009e94567847bdc81bc2e53c12a88c3ba8275e67dfae3a72b61706080318369
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ certbot.md
@@ -0,0 +1,24 @@
1
+ # Certbotで無料TLSサーバー
2
+
3
+ Certbot と Let's Encrypt の概要を紹介した後、 certbot パッケージで Let's Encrypt の無料証明書を発行してもらって運用する方法を紹介します。 すでに letsencrypt パッケージの時代に入れた環境や letsencrypt-auto (certbot-auto) 環境からの移行方法も軽く紹介します。 その他、実際の運用で工夫した設定の紹介などもする予定です。
4
+
5
+ ## 作者向け
6
+
7
+ ### 表示
8
+
9
+ rake
10
+
11
+ ### 公開
12
+
13
+ rake publish
14
+
15
+ ## 閲覧者向け
16
+
17
+ ### インストール
18
+
19
+ gem install rabbit-slide-znz-debian-certbot
20
+
21
+ ### 表示
22
+
23
+ rabbit rabbit-slide-znz-debian-certbot.gem
24
+
@@ -0,0 +1,17 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ # spec.files += Dir.glob("doc/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ # spec.add_runtime_dependency("YOUR THEME")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
@@ -0,0 +1,353 @@
1
+ # Certbotで無料TLSサーバー
2
+
3
+ author
4
+ : Kazuhiro NISHIYAMA
5
+
6
+ content-source
7
+ : Mini Debian Conference Japan 2016
8
+
9
+ date
10
+ : 2016-12-10
11
+
12
+ allotted-time
13
+ : 30m
14
+
15
+ # 自己紹介
16
+
17
+ * 西山和広
18
+ * id:znz (github, twitter など)
19
+ * Ruby コミッター
20
+
21
+ # Certbot とは?
22
+
23
+ * https://certbot.eff.org/
24
+ * EFF (Electronic Frontier Foundation) による Let's Encrypt クライアント
25
+ * 昔は `letsencrypt` (`letsencrypt-auto`) という名前だった
26
+ * 他にもクライアントはあります
27
+
28
+ # Let's Encrypt とは?
29
+
30
+ * Let's Encrypt は、無料で利用できる自動化されていてオープンな認証局(CA)です。公共の利益を図る目的で Internet Security Research Group (ISRG) が運営しています。
31
+ 引用元: https://letsencrypt.jp/about/
32
+
33
+ # 何ができる?
34
+
35
+ * 無料で使える (商用利用も可能)
36
+ * DV (ドメイン認証) 証明書
37
+ * 自動発行できる (ACME プロトコル)
38
+
39
+ # 何ができない?
40
+
41
+ * EV SSL は無理 (アドレスバーが緑になるもの)
42
+ * 証明書に入るのはドメインのみ (組織名などは入らない)
43
+ * ワイルドカードも無理
44
+
45
+ # 普通は困らないけど...
46
+
47
+ * 短期間に大量発行できない
48
+ * https://letsencrypt.org/docs/rate-limits/
49
+ * テスト用途には staging サーバーを使いましょう
50
+
51
+ # 無料証明書といえば...
52
+
53
+ * notBefore の日付が 2016 年 10 月 21 日より後であり、かつ以下に示す当該ルート証明書にチェインが繋がる証明書への信頼を破棄します。
54
+ * 引用元:【翻訳】WoSign と StartCom による今後の証明書は拒否します
55
+ http://mozsec-jp.hatenablog.jp/entry/2016/10/29/204852
56
+
57
+ # 無料証明書といえば...
58
+
59
+ * この変更は Firefox 51 のリリース予定(*注*2017-01-24) に合わせて反映されます。
60
+ * 引用元:【翻訳】WoSign と StartCom による今後の証明書は拒否します
61
+ http://mozsec-jp.hatenablog.jp/entry/2016/10/29/204852
62
+
63
+ # 基本的な使い方
64
+
65
+ * インストール
66
+ * 証明書の発行
67
+ * 証明書の更新
68
+
69
+ # インストール (推奨しない)
70
+
71
+ * `git clone https://github.com/certbot/certbot`
72
+ * `./certbot-auto --help` で依存パッケージが *自動で* インストールされる
73
+ * 定期実行の仕組みは自分で用意する必要あり (`/etc/cron.daily/local-certbot` を作成するなど)
74
+
75
+ # インストール (昔の方法)
76
+
77
+ * 昔は `letsencrypt-auto` だった
78
+ (`letsencrypt-auto` で入れた環境はそのまま使える)
79
+ * 今も `letsencrypt-auto` で入れたサーバーを動かしていますが、問題なく使えています
80
+
81
+ # インストール (推奨)
82
+
83
+ * `sudo apt-get install certbot -t jessie-backports`
84
+ * `apache` プラグインを使って `apache` の設定も自動でするなら `python-certbot-apache` パッケージ (`webroot` プラグインしか使ったことがないので説明しません)
85
+
86
+ # 証明書の発行 (前提条件)
87
+
88
+ * 単独 Web サーバー (ロードバランサーなどはない)
89
+ * ドメイン `www.example.org`
90
+ * `DocumentRoot /srv/www/www.example.org/htdocs`
91
+
92
+ # 証明書の発行 (初回)
93
+
94
+ ```
95
+ sudo certbot certonly --webroot \
96
+ -w /srv/www/www.example.org/htdocs \
97
+ -d www.example.org
98
+ ```
99
+
100
+ * メールアドレス入力
101
+ * Terms of Service への同意
102
+
103
+ # メールが送られてくる場合
104
+
105
+ * 緊急の通知、鍵を紛失したときの復旧、証明書の有効期限が近付いた場合の通知
106
+ 引用元: https://letsencrypt.jp/usage/
107
+ * 今までメールがきた例: Terms of Service の変更、証明書の有効期限が近づいた時
108
+
109
+ # 失敗したら
110
+
111
+ * `$DocumentRoot/.well-known/acme-challenge/ファイル名` が外部からちゃんとアクセスできるか確認
112
+
113
+ # apache に証明書の設定
114
+
115
+ 2.4.8 以降なら (jessie はこっち)
116
+
117
+ ```
118
+ SSLCertificateKeyFile /etc/letsencrypt/live/www.example.org/privkey.pem
119
+ SSLCertificateFile /etc/letsencrypt/live/www.example.org/fullchain.pem
120
+ ```
121
+
122
+ 2.4.7 以前なら
123
+
124
+ ```
125
+ SSLCertificateFile /etc/letsencrypt/live/www.example.org/cert.pem
126
+ SSLCertificateKeyFile /etc/letsencrypt/live/www.example.org/privkey.pem
127
+ SSLCertificateChainFile /etc/letsencrypt/live/www.example.org/chain.pem
128
+ ```
129
+
130
+ # 証明書のパス
131
+
132
+ * (たぶん) 互換性のため `certbot` に名前が変わっても `/etc/letsencrypt` のままでした
133
+ * `/etc/letsencrypt/live` 以下に `/etc/letsencrypt/archive` 以下へのシンボリックリンク
134
+ * 更新するごとに `archive` に連番で証明書や鍵などが溜まっていく
135
+
136
+ # ログのパス
137
+
138
+ * `/var/log/letsencrypt/letsencrypt.log*` にログがある
139
+
140
+ # 証明書の発行 (2個目以降)
141
+
142
+ * `sudo certbot certonly --webroot -w /srv/www/hoge.example.org/htdocs -d hoge.example.org`
143
+ * メールアドレス入力と Terms of Service への同意はなし
144
+ (`/etc/letsencrypt/accounts` 以下に保存されたアカウント情報が再利用される)
145
+
146
+ # 証明書の更新
147
+
148
+ * `certbot renew` で有効な期間が 30 日未満の証明書があれば更新される
149
+ * `/etc/cron.d/certbot` または `/lib/systemd/system/certbot.timer` で 0:00,12:00 に自動実行
150
+
151
+ # 自動実行のばらつき
152
+
153
+ * `cron.d` は `perl -e 'sleep int(rand(3600))'` で
154
+ * `certbot.timer` は `RandomizedDelaySec=3600` で
155
+ * jessie-backports の certbot 0.9.3-1~bpo8+1 で確認
156
+
157
+ # jessie だと
158
+
159
+ * `RandomizedDelaySec` は jessie の systemd だと対応していないので `systemctl status certbot.timer -l` で確認すると
160
+ `[/lib/systemd/system/certbot.timer:6] Unknown lvalue 'RandomizedDelaySec' in section 'Timer'` と出ている
161
+ * [#843607](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=843607) で報告
162
+
163
+ # サーバーに更新リクエストが集中する可能性あり
164
+
165
+ * パッケージが悪いということで何もしない?
166
+ * 更新がある時だけ、と頻度も低いのでそんなに大きな問題にはならない?
167
+ * 設定で対処?
168
+
169
+ # 遅延設定例
170
+
171
+ `/etc/systemd/system/certbot.service.d/delay.conf` を以下の内容で作成
172
+
173
+ ```
174
+ [Service]
175
+ ExecStart=
176
+ ExecStart=/bin/bash -c 'sleep $((RANDOM%3600))'
177
+ ExecStart=/usr/bin/certbot -q renew
178
+ ```
179
+
180
+ * パッケージのバージョンアップなどで対処されたら忘れずに削除すること
181
+
182
+ # 証明書更新の反映 (1/5)
183
+
184
+ * `renew-hook` を使う
185
+ * 更新成功時のみ呼ばれる
186
+ * `post-hook` でも良い
187
+ * 更新試行後に呼ばれる
188
+ * `post-hook` は `pre-hook` と組み合わせて `standalone` プラグインの時に Web サーバーを止めるのに向いている
189
+
190
+ # 証明書更新の反映 (2/5)
191
+
192
+ * `renew-hook` は初回の証明書作成時には呼ばれなかった
193
+ * 初回も呼んでほしいなら `post-hook` の方が良いかもしれない
194
+
195
+ # 証明書更新の反映 (3/5)
196
+
197
+ * `/etc/letsencrypt/cli.ini` を以下の内容で作成
198
+
199
+ ```
200
+ renew-hook = apachectl graceful
201
+ ```
202
+
203
+ * nginx なら `service nginx reload`
204
+
205
+ # 証明書更新の反映 (4/5)
206
+
207
+ * ドメインに応じて Web サーバー以外のデーモンを再起動するスクリプトを作ってフルパスで指定するのもあり
208
+
209
+ ```
210
+ renew-hook = /etc/letsencrypt/renew-hook
211
+ ```
212
+
213
+ # 証明書更新の反映 (5/5)
214
+
215
+ /etc/letsencrypt/renew-hook
216
+
217
+ ```
218
+ apachectl graceful
219
+ for domain in $RENEWED_DOMAINS; do
220
+ case "$domain" in
221
+ mx*)
222
+ service postfix reload >/dev/null
223
+ service dovecot reload
224
+ ;;
225
+ esac
226
+ done
227
+ ```
228
+
229
+ # 基本的な使い方のまとめ
230
+
231
+ * certbot webroot プラグインで既存の Web サーバーの設定を全くいじらずに証明書発行が可能
232
+ * standalone プラグインと違って、ダウンタイムも発生しない
233
+
234
+ # 様々なトピック
235
+
236
+ その他の雑多なトピックを紹介
237
+
238
+ # staging サーバー (1/3)
239
+
240
+ * rate limit を気にせず試せる
241
+ * `/etc/letsencrypt/accounts` 以下に保存されたアカウント情報はサーバーごとなので別アカウントになる
242
+ (本番に切り替えて使っていても staging の有効期限切れが近づくとメールがきた)
243
+
244
+ # staging サーバー (2/3)
245
+
246
+ * `--test-cert` オプションまたは `--staging` オプション
247
+
248
+ ```
249
+ certbot certonly --test-cert --webroot \
250
+ -w /srv/www/www.example.jp/htdocs \
251
+ -d www.example.jp
252
+ ```
253
+
254
+ # staging サーバー (3/3)
255
+
256
+ * `/etc/letsencrypt/archive` 以下のファイルの連番は本番と staging で共通
257
+ * staging で 1,2 と試した後、本番で発行すると 3 からになる
258
+
259
+ # rsa-key-size の変更
260
+
261
+ `/etc/letsencrypt/cli.ini` で
262
+
263
+ ```
264
+ rsa-key-size = 4096
265
+ ```
266
+
267
+ (デフォルトは 2048)
268
+
269
+ # 更新時の通知設定例
270
+
271
+ moreutils を入れて `/etc/systemd/system/certbot.service.d/diffmail.conf` を以下の内容で作成
272
+ (ExecStopPost の行は実際は 1 行)
273
+
274
+ [Service]
275
+ ExecStopPost=/bin/bash -c
276
+ "diff -u
277
+ <(cut -d: -f4- /var/log/letsencrypt/letsencrypt.log.1 | egrep -v '^DEBUG')
278
+ <(cut -d: -f4- /var/log/letsencrypt/letsencrypt.log | egrep -v '^DEBUG') |
279
+ ifne mail -s 'Change certbot log' root"
280
+
281
+ # 更新時の通知設定例 (解説)
282
+
283
+ * timer の実行後に実行する hook はなさそうだった
284
+ * service に直接 ExecStopPost を設定するのが良さそうにみえた
285
+ * 毎回変わる日時などが混ざる部分を除外して diff
286
+ * moreutils の ifne で diff があるときだけメール送信
287
+
288
+ # メールサーバーの例
289
+
290
+ * Web を用意できるなら webroot で更新
291
+ * メールサーバーに証明書を設定して renew-hook で reload
292
+
293
+ # 単独 Web サーバーではない環境例 (1/4)
294
+
295
+ * ロードバランサーで `$DocumentRoot/.well-known/acme-challenge` を `certbot` 実行サーバーに固定
296
+ * やったことないので詳しいことは不明
297
+
298
+ # 単独 Web サーバーではない環境例 (2/4)
299
+
300
+ * DNS で認証したい
301
+ * ACME プロトコルには DNS による認証もある
302
+ * `certbot` は向かない (途中で止まって手動で DNS 設定するようになっているようだった)
303
+
304
+ # 単独 Web サーバーではない環境例 (3/4)
305
+
306
+ * dehydrated (旧 letsencrypt.sh)
307
+ * Debian には letsencrypt.sh パッケージがある (2016-12-09 現在 0.3.0-1)
308
+ * sid には dehydrated パッケージがある (2016-12-09 現在 0.3.1-1)
309
+
310
+ # 単独 Web サーバーではない環境例 (4/4)
311
+
312
+ * https://github.com/lukas2511/dehydrated (旧 letsencrypt.sh)
313
+ * Wiki に `nsupdate` で Bind と連携する例などがある
314
+ * 他の API 対応 DNS サーバーの例もある
315
+
316
+ # 試してないけどメールアドレス変更
317
+
318
+ `certbot --help all` の情報によると
319
+
320
+ ```
321
+ certbot register --update-registration --email EMAIL
322
+ ```
323
+
324
+ で登録しているメールアドレスを変更できそうです (未確認)
325
+
326
+ # letsencrypt-auto (certbot-auto) からの移行 (1/2)
327
+
328
+ * `/etc/letsencrypt` 以下は共通
329
+ * `certbot` パッケージを入れて、
330
+ 運用を切り替えるだけでいけそう
331
+ * 試してないけど
332
+
333
+ # letsencrypt-auto (certbot-auto) からの移行 (2/2)
334
+
335
+ * git clone したディレクトリとか
336
+ * `~/.local/share/letsencrypt` 以下とか
337
+ * 不要になったパッケージはうまく消す必要あり
338
+
339
+ # letsencrypt パッケージ時代に入れた環境からの移行 (1/2)
340
+
341
+ * `sudo apt-get install certbot -t jessie-backports` で入るはず
342
+ * どこかのバージョンアップのタイミングで `sudo apt-get install 引っかかったパッケージ -t jessie-backports` という作業が必要だったことも
343
+
344
+ # letsencrypt パッケージ時代に入れた環境からの移行 (2/2)
345
+
346
+ * そのまま purge すると `/etc/letsencrypt` `/var/log/letsencrypt` が消されてしまうので、`sudoedit /var/lib/dpkg/info/letsencrypt.postrm` でコメントアウトしてから purge すると良い
347
+
348
+ # まとめ
349
+
350
+ * certbot で無料で SSL/TLS サーバー証明書
351
+ * 自動更新で運用の手間いらず
352
+ * メールサーバーなど Web 以外でも使える
353
+ * 複数サーバー環境などでは dehydrated など他のクライアントの方が良いかも
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: debian-certbot
3
+ base_name: certbot
4
+ tags:
5
+ - debian
6
+ - letsencrypt
7
+ - certbot
8
+ presentation_date: '2016-12-10'
9
+ version: 2016.12.10
10
+ licenses: []
11
+ slideshare_id: certbottls
12
+ speaker_deck_id: certbotdewu-liao-tlssaba
13
+ ustream_id:
14
+ vimeo_id:
15
+ youtube_id:
16
+ author:
17
+ markup_language: :markdown
18
+ name: Kazuhiro NISHIYAMA
19
+ email: zn@mbf.nifty.com
20
+ rubygems_user: znz
21
+ slideshare_user: znzjp
22
+ speaker_deck_user: znz
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-znz-debian-certbot
3
+ version: !ruby/object:Gem::Version
4
+ version: 2016.12.10
5
+ platform: ruby
6
+ authors:
7
+ - Kazuhiro NISHIYAMA
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ description: Certbot と Let's Encrypt の概要を紹介した後、 certbot パッケージで Let's Encrypt の無料証明書を発行してもらって運用する方法を紹介します。
28
+ すでに letsencrypt パッケージの時代に入れた環境や letsencrypt-auto (certbot-auto) 環境からの移行方法も軽く紹介します。
29
+ その他、実際の運用で工夫した設定の紹介などもする予定です。
30
+ email:
31
+ - zn@mbf.nifty.com
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - ".rabbit"
37
+ - README.md
38
+ - Rakefile
39
+ - certbot.md
40
+ - config.yaml
41
+ - pdf/debian-certbot-certbot.pdf
42
+ homepage: http://slide.rabbit-shocker.org/authors/znz/debian-certbot/
43
+ licenses: []
44
+ metadata: {}
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubyforge_project:
61
+ rubygems_version: 2.5.2
62
+ signing_key:
63
+ specification_version: 4
64
+ summary: Certbotで無料TLSサーバー
65
+ test_files: []