acme.sh インストール&設定ガイド(FujiSSL ACME)
2025年10月14日
対象:Linux(Ubuntu/Debian、RHEL/CentOS、Amazon Linux)、macOS、WSL。HTTP-01 / DNS-01 対応。Nginx/Apache/スタンドアロン配備、DNSプロバイダAPI自動化までカバー。
外部公開における重要な注意
管理ツール「契約一覧」で表示される EAB KID / EAB HMAC Key はシークレット(秘密情報)です。漏洩すると第三者があなたの組織として証明書を不正発行できるおそれがあります。
GitHub/GitLab/Bitbucket 等の公開リポジトリ、Qiita/Zenn/ブログ、SNS、外部配布資料への記載は厳禁です。
管理ツール「契約一覧」で表示される EAB KID / EAB HMAC Key はシークレット(秘密情報)です。漏洩すると第三者があなたの組織として証明書を不正発行できるおそれがあります。
GitHub/GitLab/Bitbucket 等の公開リポジトリ、Qiita/Zenn/ブログ、SNS、外部配布資料への記載は厳禁です。
Contents
0. 前提とゴール
- FujiSSL 管理ツールで ACME 契約(OV)を作成済み、以下4点を控えている:
ACMEサーバURL(例:ユーザごとに異なります)/ドメイン(FQDN)/EAB KID/EAB HMAC Key - ゴール:サーバに
fullchain.cerとprivate.keyを安全に配置し、自動更新まで動かす。
1. acme.sh のインストール
推奨:root で実施(鍵・ファイル権限を簡潔に保つため)。一般ユーザで行う場合は適宜 sudo を付与。
curl https://get.acme.sh | sh
# あるいは(プロキシ環境等で)
# git clone https://github.com/acmesh-official/acme.sh.git ~/.acme.sh
# cd ~/.acme.sh && ./acme.sh --install
- インストール後のコマンド:
~/.acme.sh/acme.sh(以下、短縮してacme.shと表記) - ログ:
~/.acme.sh/acme.sh.log - 自動更新は後述の
--install-cronjobで設定します。
2. FujiSSL をCAに設定&EABでアカウント登録
# FujiSSL の ACME ディレクトリを指定
~/.acme.sh/acme.sh --set-default-ca --server 管理画面で取得したACMEサーバURL
# EAB を用いてアカウント登録(メールは通知用)
~/.acme.sh/acme.sh --register-account \
--server 管理画面で取得したACMEサーバURL \
--eab-kid <EAB_KID> \
--eab-hmac-key <EAB_HMAC_KEY> \
-m admin@example.com
- シークレット保護:EAB KID / HMAC は環境変数や履歴に残さない。履歴に入れた場合は
history -dや~/.bash_historyから消去。 - 確認:
~/.acme.sh/account.confにアカウント情報が保存されます(600、root のみ)。
3. 証明書の発行(HTTP-01)
3-1) Webroot(Nginx/Apache 稼働中に無停止で発行)
# Webドキュメントルート(例:/var/www/html)を指定
~/.acme.sh/acme.sh --issue \
-d example.com -d www.example.com \
-w /var/www/html \
--server 管理画面で取得したACMEサーバURL
- 80/TCP を外部に開放。CDN/リバプロ利用時は
/.well-known/acme-challenge/をキャッシュ無効・素通し設定。 - 失敗時は
--debug 2を追加し、ログ~/.acme.sh/acme.sh.logを確認。
3-2) スタンドアロン(Webを一時停止できる環境)
systemctl stop nginx apache2 httpd || true
~/.acme.sh/acme.sh --issue \
-d example.com \
--standalone \
--server 管理画面で取得したACMEサーバURL
systemctl start nginx apache2 httpd || true
4. 証明書の発行(DNS-01:ワイルドカード/複雑構成向け)
4-1) まずは手動で試す
~/.acme.sh/acme.sh --issue \
-d example.com -d *.example.com \
--dns --yes-I-know-dns-manual-mode-enough-go-ahead-please \
--server 管理画面で取得したACMEサーバURL
# acme.sh が表示する TXT を DNS に追加:
# _acme-challenge.example.com TXT "(表示値)"
# 伝播後、Enter 指示に従って続行
- 伝播確認:
dig +short TXT _acme-challenge.example.com @8.8.8.8 - 複数SAN同時発行では TXT が複数必要になることがあります(すべて残す)。
4-2) 本運用:DNS API で全自動化
Cloudflare(API Token)
export CF_Token=<Cloudflare_API_Token>
export CF_Account_ID=<AccountID(必要な場合)>
export CF_Zone_ID=<ZoneID(必要な場合)>
~/.acme.sh/acme.sh --issue \
-d example.com -d *.example.com \
--dns dns_cf \
--server 管理画面で取得したACMEサーバURL
- APIトークンは最小権限(Zone.DNS:Edit など)を付与し、
exportを~/.bashrc等に平文で保存しない。systemd の EnvironmentFile を使うと安全。
AWS Route53(インスタンスロール or プロファイル)
# 適切な IAM 権限(route53:ChangeResourceRecordSets 等)を付与
export AWS_PROFILE=<profile> # もしくはロール付与で不要
~/.acme.sh/acme.sh --issue \
-d example.com -d *.example.com \
--dns dns_aws \
--server 管理画面で取得したACMEサーバURL
他のDNS(例):dnspod(dns_dp)、AliDNS(dns_ali)、Google(dns_gcloud)、Azure(dns_azure)など多数。変数名は各プロバイダの仕様に従って設定。
5. 証明書の設置(Nginx/Apache 等)
5-1) Nginx へ設置
~/.acme.sh/acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.fullchain.pem \
--reloadcmd "systemctl reload nginx"
chmod 600 /etc/nginx/ssl/example.com.key
nginx.conf(例):ssl_certificate /etc/nginx/ssl/example.com.fullchain.pem;/ssl_certificate_key /etc/nginx/ssl/example.com.key;
5-2) Apache へ設置
~/.acme.sh/acme.sh --install-cert -d example.com \
--key-file /etc/ssl/private/example.com.key \
--fullchain-file /etc/ssl/certs/example.com.fullchain.pem \
--reloadcmd "systemctl reload apache2 || systemctl reload httpd"
chmod 640 /etc/ssl/private/example.com.key
chgrp www-data /etc/ssl/private/example.com.key # Debian系の例
acme.sh の保管場所
取得物の元ファイルは
本番で参照するのは –install-cert でコピーしたパスに統一すると運用が安定します。
取得物の元ファイルは
~/.acme.sh/example.com/ にあります。本番で参照するのは –install-cert でコピーしたパスに統一すると運用が安定します。
6. 自動更新(cron)
~/.acme.sh/acme.sh --install-cronjob
# 動作確認(手動実行)
~/.acme.sh/acme.sh --cron --home ~/.acme.sh --force
# ログ確認
tail -n 200 ~/.acme.sh/acme.sh.log
- 更新は期限が近い証明書のみ実施。設置先のサービスは
--install-certの--reloadcmdで自動リロードされます。 - 自動アップグレード(任意):
~/.acme.sh/acme.sh --upgrade --auto-upgrade
7. DNS 設定の要点
- HTTP-01:対象FQDNの
A/AAAAが発行サーバに向いていること。80/TCP 到達必須。CDN は/.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(権威ではなくパブリックDNSで確認)。
8. セキュリティと権限
- EAB KID / HMAC・DNS API トークンは ファイル600 / 所有者root。CI・共有ストレージへ平文で置かない。
- 秘密鍵は
600、必要に応じて Web サーバグループのみ参照可(Apache のみ640 + chgrpなど)。 - ファイアウォール:HTTP-01 は 80/TCP、サイトは 443/TCP を開放。
9. よくあるエラーと解決
- HTTP-01 失敗:80番閉塞/リダイレクトで別ドメインへ飛んでいる/CDN がチャレンジをキャッシュ。→ 80/TCP 開放・バイパス設定・一時的に「DNS only」。
- DNS-01 失敗:TXT 値の余分な引用符・スペース/委任先ゾーンの編集漏れ。→ ゾーン正当性の確認、伝播完了まで待機。
- 権限エラー:設置先の書込権限不足。→
--install-certの出力先の所有者/権限を見直し。 - 原因追跡:
--debug 2を付けて再実行、~/.acme.sh/acme.sh.logを確認。
# 例:詳細ログで再試行
~/.acme.sh/acme.sh --issue -d example.com -w /var/www/html \
--server 管理画面で取得したACMEサーバURL --debug 2
10. 付録(便利コマンド)
# 証明書一覧
~/.acme.sh/acme.sh --list
# 個別更新/再発行
~/.acme.sh/acme.sh --renew -d example.com --force
# 取り消し(必要時のみ)
~/.acme.sh/acme.sh --revoke -d example.com
# バージョン/自己更新
~/.acme.sh/acme.sh --version
~/.acme.sh/acme.sh --upgrade --auto-upgrade
よく読まれている質問
- OV証明書 自動化手順(ACME対応)
- クロスサインが必要なのはどんな時ですか?また、利用者は何をすればよいのでしょうか?...
- DV証明書 自動化手順(ACME対応)
- Certbot インストール&設定ガイド(FujiSSL ACME)
- cert-manager 導入&設定ガイド(FujiSSL ACME)
- acme.sh インストール&設定ガイド(FujiSSL ACME)
- win-acme(Windows IIS)
- DNS 設定ガイド(HTTP-01 / DNS-01 共通)
- lego インストール&設定ガイド(FujiSSL ACME)
- 審査状況の確認
- 申請から発行までの間、どのようなメールが届きますか
- テスト証明書は発行していますか
- ファイル認証のクローラーのIPアドレスを教えてください
- FujiSSLは世界的CA「Sectigo」の中間認証局です
- FujiSSLのクーポンの有効期限はありますか?
- FujiSSLではどのACMEクライアントが使えますか?
- 身に覚えのない11円の請求がありました。なぜですか?
- 複数年プランについて
- キャンセルしたいのですが、返金はどのようにされますか。
- クライアント証明書発行までの流れ






