1. lego v5 を配置
公式の GitHub Releases から Linux amd64 版を取得し、/usr/local/bin/lego-v5 に配置します。
※64bit 系 Linux の例です。ご自身の環境に応じて適切なバージョンを配置してください。
sudo curl -fL "https://github.com/go-acme/lego/releases/download/v5.2.2/lego_v5.2.2_linux_amd64.tar.gz" -o lego.tgz
TMP_LEGO_DIR="$(mktemp -d)"
sudo tar -xzf lego.tgz --no-same-owner -C "$TMP_LEGO_DIR" lego
sudo install -o root -g root -m 755 "$TMP_LEGO_DIR/lego" /usr/local/bin/lego-v5
sudo rm -rf "$TMP_LEGO_DIR"
sudo rm lego.tgz
sudo /usr/local/bin/lego-v5 --version
2. 新規発行
HTTP-01 では、対象FQDNの /.well-known/acme-challenge/ が外部から参照できる必要があります。
CDN、リバースプロキシ、リダイレクト設定を使っている場合は、認証パスが素通しされるようにしてください。
Apache のサービス名は環境に応じて httpd または apache2 に読み替えてください。
sudo \
/usr/local/bin/lego-v5 run \
--http \
--http.webroot "/var/www/docs/www.domain-keeper.net" \
--path "/etc/SSL1234567-www.domain-keeper.net" \
--cert.name "www.domain-keeper.net" \
-d "www.domain-keeper.net" \
-d "domain-keeper.net" \
--eab \
--kid "EXAMPLEKID" \
--hmac "EXAMPLEHMAC" \
--server "https://acme.amecert.jprs.jp/DV/getDirectory" \
--key-type rsa2048 \
--accept-tos \
--email "example@domain-keeper.net" \
--no-bundle \
--deploy-hook "systemctl reload httpd"
3. 証明書保存ディレクトリ
--path で指定したディレクトリ配下に、アカウント情報、証明書、秘密鍵が保存されます。
証明書
/etc/SSL1234567-www.domain-keeper.net/certificates/www.domain-keeper.net.crt
中間証明書
/etc/SSL1234567-www.domain-keeper.net/certificates/www.domain-keeper.net.issuer.crt
秘密鍵
/etc/SSL1234567-www.domain-keeper.net/certificates/www.domain-keeper.net.key
--no-bundle を指定しているため、lego の .crt はサーバ証明書のみです。
中間証明書は .issuer.crt を指定します。Webサーバ側で証明書チェーンを1ファイルで指定する必要がある場合は、
サーバ証明書と中間証明書を結合したファイルを別途作成してください。
4. Cronによる自動更新
初回発行後は --path 配下にアカウント情報が保存されます。
Cron 例では保存済みの情報を使い、残り日数が30日以下になった場合だけ更新します。
sudo tee /etc/cron.d/SSL1234567-www.domain-keeper.net-lego >/dev/null <<'EOF'
0 3 * * * root mkdir -p /var/log/lego && /usr/local/bin/lego-v5 run --http --http.webroot "/var/www/docs/www.domain-keeper.net" --path "/etc/SSL1234567-www.domain-keeper.net" --cert.name "www.domain-keeper.net" -d "www.domain-keeper.net" -d "domain-keeper.net" --server "https://acme.amecert.jprs.jp/DV/getDirectory" --key-type rsa2048 --accept-tos --email "example@domain-keeper.net" --renew-days 30 --no-bundle --no-random-sleep --deploy-hook "systemctl reload httpd" >>/var/log/lego/SSL1234567-www.domain-keeper.net.log 2>&1
EOF
sudo chmod 600 /etc/cron.d/SSL1234567-www.domain-keeper.net-lego
sudo chown root:root /etc/cron.d/SSL1234567-www.domain-keeper.net-lego
5. 主な指定の役割
--http: HTTP-01 認証を使う指定です。
--http.webroot: 認証ファイルを書き込むWeb公開ディレクトリです。lego内蔵HTTPサーバは使いません。
--path: アカウント情報、証明書、秘密鍵を保存するディレクトリです。
--cert.name: lego 内で証明書を管理する名前です。
-d: 証明書へ含めるFQDNです。先頭の値が管理上の基準名になります。
--eab --kid --hmac: 初回アカウント登録で使う外部アカウント連携情報です。
--no-bundle: .crt に中間証明書を含めず、サーバ証明書と中間証明書を別ファイルで保存します。
run --no-bundle --deploy-hook: 新規発行し、発行後にWebサーバをリロードします。
run --renew-days 30 --deploy-hook: 残り日数が30日以下になった証明書を更新し、更新後にWebサーバをリロードします。
6. 確認ポイント
/.well-known/acme-challenge/ へのHTTPアクセスが外部から到達すること。
--http.webroot で指定したディレクトリが、対象FQDNのDocumentRootと一致していること。
- hook で実行する
systemctl reload httpd が対象サーバで正常に動くこと。
- Cronの登録内容と更新ログを確認できること。
公式サイト:
GitHub Releases
/
CLI Options