certbotの代わりにLegoを使ってみます。

インストール

Releasesからダウンロードします。

https://github.com/go-acme/lego

シングルバイナリなので/usr/local/binに配置するだけです。

シェルスクリプトの作成

コマンドを直接入力でもできますが、シェルスクリプトにしたほうが楽です。

今回はCloudflareのDNSを使って証明書を取得します。

以前の記事と同じようにAPIトークンを先に取得しておきます。

webrootモードでやることも可能です。

Let’s Encrypt

#!/bin/bash

CF_DNS_API_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  lego --path "/usr/local/etc/lego/data" \
  --email "[email protected]" \
  --domains "example.com" \
  --domains "*.example.com" \
  --dns cloudflare \
  -a run

ZeroSSL

ZeroSSLのアクセスキーが必要です。

#!/bin/bash

ACCESS_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
JSON=$(curl -s -X POST "https://api.zerossl.com/acme/eab-credentials?access_key=$ACCESS_KEY")
EAB_KEY=$(echo "$JSON" | jq -r .eab_kid)
EAB_HMAC_KEY=$(echo "$JSON" | jq -r .eab_hmac_key)

CF_DNS_API_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  lego --path "/usr/local/etc/lego/data" \
  --email "[email protected]" \
  --domains "example.com" \
  --domains "*.example.com" \
  --server "https://acme.zerossl.com/v2/DV90" \
  --eab --kid "$EAB_KEY" --hmac "$EAB_HMAC_KEY" \
  --dns cloudflare \
  -a run

シェルスクリプトを実行すると取得ができます。

このシェルスクリプトでは/usr/local/etc/lego/dataに証明書やアカウント情報が保存されます。

アクセストークン等が含まれているのでパーミッションに注意して保存します。

証明書のリストを表示

$ lego --path /usr/local/etc/lego/data list

証明書の更新

先程作成したシェルスクリプトrunrenewに変えると、そのまま更新用スクリプトとして使えます。