lego+docker-composeでワイルドカード証明書を爆速ゲット
legoを使えば簡単にワイルドカード証明書を取得できるので、docker-composeでお手軽環境を作ってみました。
結論
-
APIを使用するためのトークンを取得する|ConoHa VPSサポート を参考にアクセストークンを取得
- 以下のdocker-composeにトークン、ドメイン、メールアドレスを設定する
mkdir lego && docker-compose up
version: '3.3'
services:
lego:
image: xenolf/lego
environment:
- CONOHA_REGION=tyo1
- CONOHA_TENANT_ID=********************************
- CONOHA_API_USERNAME=************
- CONOHA_API_PASSWORD=************
command: >
--path /lego
--dns conoha
--email [email protected]
--domains "*.mydomain.com"
--domains "mydomain.com"
--accept-tos
run
volumes:
- type: bind
source: ./lego
target: /lego
legoについて
mkdir lego && docker-compose up
version: '3.3'
services:
lego:
image: xenolf/lego
environment:
- CONOHA_REGION=tyo1
- CONOHA_TENANT_ID=********************************
- CONOHA_API_USERNAME=************
- CONOHA_API_PASSWORD=************
command: >
--path /lego
--dns conoha
--email [email protected]
--domains "*.mydomain.com"
--domains "mydomain.com"
--accept-tos
run
volumes:
- type: bind
source: ./lego
target: /lego
legoはGo製のLet's Encrypt
のクライアントアプリです。certbotよりもお手軽に使える感じで良いです。
docker化しなくとも、Release v2.6.0 · go-acme/lego からバイナリを習得して設置すれば使えるので、docker化するメリットもあまり無いのですが環境をまとめる意味でdocker-composeで構成を書いておきました。
今回は個人で借りているConoHaのVPSにあるDNS APIを利用して証明書を発行しました。
ConoHaのDNSをAPIから操作する話 - NaruseJunのメモ帳の方がConoha対応していただいたみたいです。ありがとうございます。
その他で対応しているプロバイダは以下にまとめられていました。
DNS Providers :: Let’s Encrypt client and ACME library written in Go.
AWSの場合は以下のサイトが参考になります。Route53のパーミッションの設定等がわかればすぐわかる内容かな、という感じでした。
- Let'sEncryptのワイルドカード証明書取得ならlegoがお薦め - re:inventing the wheel
- lego で Let's Encrypt の証明書を Route53 DNS 認証で取得する - らくがきちょう
Conohaでの作業手順
- ConohaのAPI利用のためのトークンを取得
- docker-compose.ymlの設定
- 実行
これだけです。
アクセストークの習得は APIを使用するためのトークンを取得する|ConoHa VPSサポート を参考にお願いします。
docker-composeの設定
以下のdocker-compose.yml
ファイルを用意します
version: '3.3'
services:
lego:
image: xenolf/lego
environment:
- CONOHA_REGION=tyo1
- CONOHA_TENANT_ID=********************************
- CONOHA_API_USERNAME=************
- CONOHA_API_PASSWORD=************
command: >
--path /lego
--dns conoha
--email [email protected]
--domains "*.mydomain.com"
--domains "mydomain.com"
--accept-tos
run
volumes:
- type: bind
source: ./lego
target: /lego
environment
のところは管理ページにしたがって自身のものを使ってください。
環境変数 | 設定値 | 備考 |
---|---|---|
CONOHA_REGION | tyo1 | シンガポールリージョンならsin1 ? |
CONOHA_TENANT_ID | 管理ページのテナントID | |
CONOHA_API_USERNAME | 管理ページのユーザー名 | |
CONOHA_API_PASSWORD | 管理ページのパスワード |
その他、email
を自分の物に、domains
を発行したい自身のドメイン名に書き変えて以下を実行します。
$ mkdir lego
$ docker-compose up
Recreating lego_lego_1 ... done
Attaching to lego_lego_1
lego_1 | 2019/06/09 06:03:19 [INFO] [*.mydomain.com] acme: Obtaining bundled SAN certificate
lego_1 | 2019/06/09 06:03:20 [INFO] [*.mydomain.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/nQXbiz2zp5iqoG7fetDLx76RxpSOF0SXAHy8mcGKRew
lego_1 | 2019/06/09 06:03:20 [INFO] [*.mydomain.com] acme: use dns-01 solver
lego_1 | 2019/06/09 06:03:20 [INFO] [*.mydomain.com] acme: Preparing to solve DNS-01
lego_1 | 2019/06/09 06:03:20 [INFO] [*.mydomain.com] acme: Trying to solve DNS-01
lego_1 | 2019/06/09 06:03:20 [INFO] [*.mydomain.com] acme: Checking DNS record propagation using [127.0.0.11:53]
lego_1 | 2019/06/09 06:03:20 [INFO] Wait for propagation [timeout: 1m0s, interval: 2s]
lego_1 | 2019/06/09 06:03:25 [INFO] [*.mydomain.com] The server validated our request
lego_1 | 2019/06/09 06:03:25 [INFO] [*.mydomain.com] acme: Cleaning DNS-01 challenge
lego_1 | 2019/06/09 06:03:26 [INFO] [*.mydomain.com] acme: Validations succeeded; requesting certificates
lego_1 | 2019/06/09 06:03:27 [INFO] [*.mydomain.com] Server responded with a certificate.
lego_lego_1 exited with code 0
こんな感じで出力されればOKです。
以下のようなファイルができているはずです。
$ sudo find lego
lego
lego/certificates
lego/certificates/_.mydomain.com.json
lego/certificates/_.mydomain.com.crt
lego/certificates/_.mydomain.com.issuer.crt
lego/certificates/mydomain.com.crt
lego/certificates/mydomain.com.json
lego/certificates/mydomain.com.key
lego/certificates/_.mydomain.com.key
lego/certificates/mydomain.com.issuer.crt
lego/accounts
lego/accounts/acme-staging-v02.api.letsencrypt.org
lego/accounts/acme-staging-v02.api.letsencrypt.org/[email protected]
lego/accounts/acme-staging-v02.api.letsencrypt.org/[email protected]/keys
lego/accounts/acme-staging-v02.api.letsencrypt.org/[email protected]/keys/[email protected]
lego/accounts/acme-staging-v02.api.letsencrypt.org/[email protected]/account.json
lego/accounts/acme-v02.api.letsencrypt.org
lego/accounts/acme-v02.api.letsencrypt.org/[email protected]
lego/accounts/acme-v02.api.letsencrypt.org/[email protected]/keys
lego/accounts/acme-v02.api.letsencrypt.org/[email protected]/keys/[email protected]
lego/accounts/acme-v02.api.letsencrypt.org/[email protected]/account.json
あとはnginx等で読みこめばOKです。
ssl_certificate /etc/lego/certificates/_.mydomain.com.crt;
ssl_certificate_key /etc/lego/certificates/_.mydomain.com.key;
ファイルの出力先を変えたい場合はvolumes属性を変えれば良いです。
volumes:
- type: bind
- source: ./lego
+ source: /path/to/output
target: /lego
更新について
証明書の更新はrun
ではなくrenew
コマンドで実行します。
その際に--days
オプションをつけておけば、例えば30日未満にならないと更新処理を走らないようにできます。
version: '3.3'
services:
lego:
image: xenolf/lego
environment:
- CONOHA_REGION=tyo1
- CONOHA_TENANT_ID=********************************
- CONOHA_API_USERNAME=************
- CONOHA_API_PASSWORD=************
command: >
--path /lego
--dns conoha
--email [email protected]
--domains "*.mydomain.com"
--domains "mydomain.com"
--accept-tos
- run
+ renew
+ --days 30
volumes:
- type: bind
source: ./lego
target: /lego
参考
Let'sEncryptのワイルドカード証明書取得ならlegoがお薦め - re:inventing the wheel
ConoHaのDNSをAPIから操作する話 - NaruseJunのメモ帳
DNS Providers :: Let’s Encrypt client and ACME library written in Go.
Let'sEncryptのワイルドカード証明書取得ならlegoがお薦め - re:inventing the wheel
Author And Source
この問題について(lego+docker-composeでワイルドカード証明書を爆速ゲット), 我々は、より多くの情報をここで見つけました https://qiita.com/dbgso/items/233e68f07eb864be60e6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .