certbot-autoが動かなくなったので acme.sh で zerossl と Let's encrypt のSSL証明書発行をした
最終更新日:22/03/05
ちょっと古いVPSの管理をしていて、certbot-auto が動かなくなったので
snapd、acme.sh、legoと代替を考えて、シェルスクリプトでzerosslにも対応している
acme.shがよさそうだと思い入れてみました
acme.sh のダウンロード&インストール
$ curl https://get.acme.sh | sh
実行したユーザディレクトリの下に .acme.sh/acme.sh ができます
便宜上 /home/kuni/.acme.sh/acme.sh としておきます
acme.sh で zerossl 証明書を発行
https://zerossl.com/
WEBからだと証明書3つまでしか作れませんが、acme.shを使うと制限が外れます
exsample.comで証明書を発行する場合
$ /home/kuni/.acme.sh/acme.sh --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --issue -d exsample.com
デフォルトでは zerossl を使用するので acme.sh --register-account -m my@example.com
を付けて実行しろと言われます
$ /home/kuni/.acme.sh/acme.sh --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --issue -d exsample.com --register-account -m kuni@exsample.com
Registered
ACCOUNT_THUMBPRINT=
がでるとOK
dns登録モードで --dns と --force オプションを付けて実行
$ /home/kuni/.acme.sh/acme.sh --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --issue -d exsample.com --force
Domain: '_acme-challenge.exsample.com'
TXT value: ''
が表示されたら、nameserver に表示された情報を登録
10分ぐらいしてから --dns --force --renew オプションを付けて実行
$ /home/kuni/.acme.sh/acme.sh --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --issue -d exsample.com --force --renew
DNSがきちんと登録されていたら、Cert Successの後に証明書が発行されます
Your cert is in: /home/kuni/.acme.sh/exsample.com/exsample.com.cer
Your cert key is in: /home/kuni/.acme.sh/exsample.com/exsample.com.key
The intermediate CA cert is in: /home/kuni/.acme.sh/exsample.com/ca.cer
And the full chain certs is there: /home/kuni/.acme.sh/exsample.com/fullchain.cer
有効期限は --list で表示
$ /home/kuni/.acme.sh/acme.sh --list
後はapacheなりnginxなりに設定すればOK
これだと更新時に自動化できない問題に気付き(証明書発行から69日後)、Let's encryptの証明書を発行しました
一応自動化する方法もあるのですが、nameserverを対応している所に変えないといけない等めんどくさかった(一番最後に記述)
acme.sh で Let's encrpyt の証明書発行方法
まず、acme.sh のデフォルトCAサーバは zerossl になっているのでletsencryptに変更
$ /home/kuni/.acme/acme.sh --set-default-ca --server letsencrypt
Changed default CA to: https://acme-v02.api.letsencrypt.org/directory
zerosslのデータ(ディレクトリ)を移動します
cd /home/kuni/.acme.sh
mv exsample.com zero_exsample.com
letsencrpyt_test で証明書が発行できるかテスト
$ /home/kuni/.acme.sh/acme.sh --issue -d exsample.com -w /var/www/html --server letsencrypt_test
/.well-known/acme-challenge/ にアクセスできないといつまでたっても証明書が発行できません(結構ハマった)
証明書が発行出来たらディレクトリを rm(削除) します(テスト証明書不要なため)
rm -rf exsample.com
※acme.shがディレクトリあるかないかで判断しているため
letsencrypt本番で証明書発行 _testを外す
$ /home/kuni/.acme.sh/acme.sh --issue -d exsample.com -w /var/www/html --server letsencrypt
Create account key ok. の後に証明書が発行されます
ファイル名は zerossl と Let's encrypt 同じようです
Your cert is in: /home/kuni/.acme.sh/exsample.com/exsample.com.cer
Your cert key is in: /home/kuni/.acme.sh/exsample.com/exsample.com.key
The intermediate CA cert is in: /home/kuni/.acme.sh/exsample.com/ca.cer
And the full chain certs is there: /home/kuni/.acme.sh/exsample.com/fullchain.cer
let's encrypt と同じ状態に証明書を配置する場合 exsample.com を該当ドメインに変更
$ acme.sh --install-cert -d exsample.com --key-file /etc/letsencrypt/live/exsample.com/privkey.pem --fullchain-file /etc/letsencrypt/live/exsample.com/fullchain.pem --cert-file /etc/letsencrypt/live/exsample.com/cert.pem
acme.sh その他細かい事
設定ファイルは下記にあります
/home/kuni/.acme.sh/account.conf
/home/kuni/.acme.sh/exsample.com/exsample.com.conf
/home/kuni/.acme.sh/acme.sh --set-default-ca --server letsencrypt を実行していたら
account.confに
DEFAULT_ACME_SERVER='https://acme-v02.api.letsencrypt.org/directory'
となっているはずです
LOG_FILE="/home/kuni/.acme.sh/acme.sh.log"
LOG出力オプションなどもあります
wikiにいろいろ情報があります
https://github.com/acmesh-official/acme.sh/wiki
zerossl dnsapiでやるなら下記あたりではないかと思います
1. Cloudflare Option:
https://github.com/acmesh-official/acme.sh/wiki/dnsapi#1-cloudflare-option
31. Use Hurricane Electric
https://github.com/acmesh-official/acme.sh/wiki/dnsapi#31-use-hurricane-electric
証明書を発行する --serverオプションは BuyPass.com や SSL.com も利用可能
https://github.com/acmesh-official/acme.sh/wiki/Server
https://github.com/acmesh-official/acme.sh/wiki/BuyPass.com-CA
関連する記事:3件
- conohaでalphassl 1年無料を設定する (2022年08月14日)
- Let's encryptの 90日 証明書から acme.sh と Buypass で180日の証明書に変更する (2022年05月10日)
- nginx ssl_chipers と ssl_conf_command の設定覚書 (2022年02月11日)