• TOP
  • サーバー関連
  • certbot-autoが動かなくなったので acme.sh で zerossl と Let's encrypt のSSL証明書発行をした

2021年11月24日

certbot-autoが動かなくなったので acme.sh で zerossl と Let's encrypt のSSL証明書発行をした

ちょっと古い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 [email protected]
を付けて実行しろと言われます

$ /home/kuni/.acme.sh/acme.sh --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --issue -d exsample.com --register-account -m [email protected]

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

certbot-autoはpython環境に依存(壊れて動かなくなった)
pythonに依存しない acme.sh シンプルで良いです

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

https://github.com/acmesh-official/acme.sh/wiki/SSL.com-CA

スポンサーリンク



  • follow us in feedly