lego インストール&設定ガイド(FujiSSL ACME)
2025年10月20日
Contents
lego インストール&設定ガイド(FujiSSL ACME|OV)
対象:Linux / macOS / Windows(WSL/ネイティブ)。HTTP-01 / DNS-01 対応。Webサーバ連携・自動更新・API連携(Cloudflare/Route53 等)までカバー。
外部公開における重要な注意
管理ツール「契約一覧」で表示される EAB KID / EAB HMAC Key は機密情報です。漏洩すると第三者があなたの組織として証明書を不正発行できるおそれがあります。
GitHub/GitLab/Bitbucket 等の公開リポジトリ、Qiita/Zenn/ブログ、SNS、外部配布資料には絶対に記載しないでください。
管理ツール「契約一覧」で表示される EAB KID / EAB HMAC Key は機密情報です。漏洩すると第三者があなたの組織として証明書を不正発行できるおそれがあります。
GitHub/GitLab/Bitbucket 等の公開リポジトリ、Qiita/Zenn/ブログ、SNS、外部配布資料には絶対に記載しないでください。
0. 前提とゴール
- FujiSSL 管理ツールで ACME 契約(OV) を作成済み、以下4点を控える:
ACMEサーバURL(例:ユーザごとに異なります)/ドメイン(FQDN)/EAB KID/EAB HMAC Key - ゴール:
fullchain.pemとkey.pemを安全に配置し、自動更新まで動かす。
1. lego のインストール
Linux(64bit バイナリ)
# 公式リリースから最新を取得(例:vX.Y.Z)
LEGO_VER=vX.Y.Z
curl -L -o /tmp/lego.tar.gz "https://github.com/go-acme/lego/releases/download/${LEGO_VER}/lego_${LEGO_VER#v}_linux_amd64.tar.gz"
sudo tar -C /usr/local/bin -xzf /tmp/lego.tar.gz lego
lego --version
macOS(Homebrew)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install lego
lego --version
Windows
- WSL:Ubuntu を導入して上記 Linux 手順でOK。
- ネイティブ:GitHub Releases の
lego_windows_amd64.zipを展開し、lego.exeを PATH の通った場所へ配置。
2. FujiSSL でのアカウント作成(EAB)
# メールは通知用(失効/更新の連絡先)
lego --server 管理画面で取得したACMEサーバURL \
--eab \
--kid <EAB_KID> \
--hmac <EAB_HMAC_KEY> \
--email admin@example.com \
--accept-tos \
run --http --domains example.com
# ↑ ここでは一度 http チャレンジで run して「アカウント作成」を済ませるのが最短です。
# 以降の正式発行は別コマンドで行って構いません。
- HMAC Key の形式:FujiSSL の管理ツールに表示される EAB HMAC Key をそのまま指定します(base64 等への変換は不要です)。
- 作成されたアカウント情報は lego のワークディレクトリ(次章参照)に保存されます。
3. 出力先(–path)とファイル構成
lego はカレントに .lego/ を作成します。運用では明示的に --path を固定しましょう。
/opt/lego/
├── certificates/
│ ├── example.com.crt (サーバ証明書)
│ ├── example.com.issuer.crt(中間証明書)
│ ├── example.com.json (メタ)
│ └── example.com.key (秘密鍵)
└── accounts/… (ACMEアカウント)
4. 証明書の発行:HTTP-01(もっとも簡単)
4-1) Webroot(無停止、既存Web配下に書き込む)
# 例:/var/www/html がドキュメントルート
sudo lego --server 管理画面で取得したACMEサーバURL \
--path /opt/lego \
--eab --kid <EAB_KID> --hmac <EAB_HMAC_KEY> \
--email admin@example.com \
--http --http.webroot /var/www/html \
--domains example.com --domains www.example.com \
run
- 80/TCP を外部公開。CDN/リバプロ経由は
/.well-known/acme-challenge/を素通し・キャッシュ無効に。
4-2) スタンドアロン(一時的に:80 を lego が占有)
sudo systemctl stop nginx apache2 httpd || true
sudo lego --server 管理画面で取得したACMEサーバURL \
--path /opt/lego \
--eab --kid <EAB_KID> --hmac <EAB_HMAC_KEY> \
--email admin@example.com \
--http \
--domains example.com \
run
sudo systemctl start nginx apache2 httpd || true
5. 証明書の発行:DNS-01(ワイルドカード/複雑構成)
5-1) Cloudflare(API Token)
# 最小権限の API Token を用意(Zone.DNS:Edit)
export CLOUDFLARE_DNS_API_TOKEN=<CF_API_TOKEN>
sudo lego --server 管理画面で取得したACMEサーバURL \
--path /opt/lego \
--eab --kid <EAB_KID> --hmac <EAB_HMAC_KEY> \
--email admin@example.com \
--dns cloudflare \
--domains example.com --domains *.example.com \
run
- 環境変数名は
CLOUDFLARE_DNS_API_TOKEN(もしくは旧来のCLOUDFLARE_API_TOKEN)。 - トークンはファイル600、root 管理。
~/.bashrcへの平文保存は避け、systemd EnvironmentFile などで供給を推奨。
5-2) AWS Route53(インスタンスロール or プロファイル)
# awscli やIMDSで認証済みであること(route53:ChangeResourceRecordSets 権限)
export AWS_PROFILE=<profile> # ロールなら不要
sudo lego --server 管理画面で取得したACMEサーバURL \
--path /opt/lego \
--eab --kid <EAB_KID> --hmac <EAB_HMAC_KEY> \
--email admin@example.com \
--dns route53 \
--domains example.com --domains *.example.com \
run
他のDNSプロバイダ:--dns にプロバイダ名(例:azure、dnspod、gcloud など)を指定し、legoの要求する環境変数を設定してください。
6. Webサーバへの設置(Nginx/Apache)
6-1) Nginx
# lego 出力(/opt/lego/certificates)を本番パスへコピー
install -d -m 755 /etc/nginx/ssl
install -m 600 /opt/lego/certificates/example.com.key /etc/nginx/ssl/example.com.key
install -m 644 /opt/lego/certificates/example.com.crt /etc/nginx/ssl/example.com.fullchain.pem
# nginx.conf(例)
# ssl_certificate /etc/nginx/ssl/example.com.fullchain.pem;
# ssl_certificate_key /etc/nginx/ssl/example.com.key;
systemctl reload nginx
6-2) Apache
install -d -m 755 /etc/ssl/{certs,private}
install -m 640 /opt/lego/certificates/example.com.key /etc/ssl/private/example.com.key
install -m 644 /opt/lego/certificates/example.com.crt /etc/ssl/certs/example.com.fullchain.pem
chgrp www-data /etc/ssl/private/example.com.key # Debian系の例
# vhost(例)
# SSLCertificateFile /etc/ssl/certs/example.com.fullchain.pem
# SSLCertificateKeyFile /etc/ssl/private/example.com.key
systemctl reload apache2 || systemctl reload httpd
ファイル名の注意
lego の
lego の
example.com.crt は「サーバ証明書+中間証明書の連結(fullchain)」です。多くの環境でそのまま fullchain として利用できます。
7. 自動更新(cron / systemd)
lego は renew を定期実行します。満了が近い証明書のみ更新されます。
cron 例(毎日 3:10)
sudo crontab -e
10 3 * * * lego --server 管理画面で取得したACMEサーバURL \
--path /opt/lego \
--email admin@example.com \
--eab --kid <EAB_KID> --hmac <EAB_HMAC_KEY> \
renew --days 30 --renew-hook "systemctl reload nginx || systemctl reload apache2"
systemd で環境変数を安全に渡す(例)
# /etc/systemd/system/lego-renew.service
[Unit]
Description=lego renew
[Service]
Type=oneshot
EnvironmentFile=/etc/lego/env # EAB/TOKEN をここに(600)
ExecStart=/usr/local/bin/lego --server 管理画面で取得したACMEサーバURL --path /opt/lego --email admin@example.com --eab --kid %EAB_KID% --hmac %EAB_HMAC_KEY% renew --days 30 --renew-hook "systemctl reload nginx || systemctl reload apache2"
# /etc/systemd/system/lego-renew.timer
[Unit]
Description=Run lego renew daily
[Timer]
OnCalendar=03:10
Persistent=true
[Install]
WantedBy=timers.target
※ /etc/lego/env は 600 / root:root で保存し、平文でリポジトリに入れないこと。
8. DNS 設定の要点
- HTTP-01:対象 FQDN の
A/AAAAが発行サーバに向いていること。/.well-known/acme-challenge/をリダイレクト/キャッシュしない。 - DNS-01:
_acme-challenge.<FQDN>に TXT。ワイルドカードは_acme-challenge.example.com。TTL は 60〜300 秒で運用。 - CAA を独自運用している場合のみ、使用 CA を許可(未設定なら作業不要)。
- 伝播確認:
dig +short TXT _acme-challenge.example.com @8.8.8.8。
9. よくあるエラーと解決
- HTTP-01 失敗:80/TCP 未開放、CDN がチャレンジをキャッシュ、リライトで別ドメインへ。→ 素通し・一時的に「DNS only」へ。
- DNS-01 失敗:TXT 値の余分な引用符/空白、委任ゾーンの編集漏れ。→ 伝播完了をパブリックDNSで確認。
- 権限エラー:設置先への書込/参照権限不足。秘密鍵は
600(Apache は640 + chgrp)。 - 原因追跡:
--verboseを付与し、lego の出力と権限/ファイアウォール/ログを確認。
# 例:詳細表示で再試行(HTTP-01 Webroot)
sudo lego --server 管理画面で取得したACMEサーバURL \
--path /opt/lego \
--eab --kid <EAB_KID> --hmac <EAB_HMAC_KEY> \
--email admin@example.com \
--http --http.webroot /var/www/html \
--domains example.com --domains www.example.com \
run --verbose
10. 付録(便利コマンド)
# 既存証明書の更新(即時)
lego --server 管理画面で取得したACMEサーバURL --path /opt/lego renew --days 90 --no-hook
# 単一ドメインだけ更新
lego --server 管理画面で取得したACMEサーバURL --path /opt/lego --domains example.com renew --days 30
# アカウント/証明書の場所表示
tree /opt/lego -L 2
# 失効(必要時のみ)
lego --server 管理画面で取得したACMEサーバURL --path /opt/lego revoke --cert /opt/lego/certificates/example.com.crt
よく読まれている質問
- ACMEを使って、証明書を複数サーバーで自動更新できますか?
- OV証明書 自動化手順(ACME対応)
- ACMEで発行される証明書は、wwwあり・なし(2way/SANs)に対応していますか?...
- クロスサインが必要なのはどんな時ですか?また、利用者は何をすればよいのでしょうか?...
- DV証明書 自動化手順(ACME対応)
- win-acme(Windows IIS用)インストール&設定ガイド(FujiSSL ACME)
- FujiSSLは世界的CA「Sectigo」の中間認証局です
- ACMEプロトコルを利用した証明書自動化の場合、料金の支払い方法はどうなりますか?...
- ACMEで自動更新された証明書が正常に更新されているか、どのように確認できますか?...
- ACMEクライアントで、鍵生成から証明書のインストールまで対応できますか?...
- FujiSSLではどのACMEクライアントが使えますか?
- 2026年3月15日からSSL/TLS証明書の有効期間が200日に短縮されます
- クライアント証明書発行までの流れ
- どこのサーバでもSiteLockを利用できますか?
- ACMEで証明書を取得・更新するために、サーバー側で必要な要件は何ですか?...
- 社内ネットワークの制限(FW/プロキシ)で外部通信ができない場合、ACMEは利用できますか?...
- ロードバランサ配下の複数Webサーバー構成では、ACMEはどのように運用すればよいですか?...
- 1台で取得した証明書を他サーバーへ配布する場合、どのような方法がありますか?...
- 身に覚えのない11円の請求がありました。なぜですか?






