- Home
- acme.sh SSL証明書 自動更新 設定手順書
acme.sh SSL証明書 自動更新 設定手順書
🟠 Debian/Ubuntu Ubuntu 20.04/22.04、Debian 11/12
🔴 RedHat系 RHEL 8/9、AlmaLinux 8/9、Rocky Linux 8/9
共通 両系統で同じコマンド
1概要
1.1 acme.sh とは
acme.sh は Pure Shell Script で実装された軽量なACMEクライアントです。Python や Node.js などのランタイムが不要で、curl(または wget)だけで動作するため、幅広いLinux/UNIX環境に対応しています。
| 項目 | acme.sh | Certbot |
|---|---|---|
| 実装 | Pure Shell Script | Python |
| 外部依存 | curl / wget のみ | Python ランタイム必要 |
| インストール | スクリプト1本 | snap / apt / dnf |
| Webサーバ設定の自動変更 | 行わない(証明書取得のみ) | プラグインで自動変更可 |
| 自動更新の管理 | cron(自動登録) | systemd timer |
1.2 webrootモードの仕組み
ACMEサーバからのチャレンジファイルを既存Webサーバのドキュメントルート配下に配置し、ドメインの所有権を証明します。
① acme.sh
チャレンジファイルを/.well-known/acme-challenge/ に配置
→
② ACMEサーバ
HTTP経由でチャレンジファイルにアクセスし、ドメイン所有権を検証
→
③ 証明書発行
検証成功により証明書を発行。Webサーバの停止は不要
Webサーバは停止不要。80番ポートで通常通りサービスを継続しながら認証できます。
1.3 事前準備・前提条件
| 項目 | 内容 |
|---|---|
| ドメイン | 証明書を取得するFQDN(例:example.com)が確定していること |
| DNSレコード | 対象ドメインのAレコードが本サーバのグローバルIPを向いていること |
| 80番ポート | 外部からHTTPアクセス(TCP/80)が到達できること |
| Webサーバ動作 | Apache または Nginx が稼働し、webrootディレクトリが公開済みであること |
| 認証局情報 | 証明書を申し込み済であり、ACME Server URL / Key ID / HMAC Key が取得済みであること |
| curl または wget | インストール済みであること |
2設定手順
STEP 1依存パッケージのインストール
sudo apt update
sudo apt install -y curl socat
sudo dnf install -y curl socat
socat はスタンドアロンモードで80番ポートを一時使用する際に必要です。webrootモードのみ使う場合は必須ではありませんが、インストールを推奨します。
STEP 2acme.sh のインストール
acme.sh は一般ユーザで実行することを推奨します。
# curl でインストール(メールアドレスは管理者のものに変更してください)
curl https://get.acme.sh | sh -s email=admin@your-domain.example.com
インストール完了後、シェルを再読み込みします:
source ~/.bashrc
# バージョン確認
acme.sh --version
インストール先は
~/.acme.sh/ です。cron への自動登録も同時に行われます(crontab -l で確認できます)。
STEP 3EAB(外部アカウントバインディング)情報の確認
SSLセキュアの管理画面から以下の3つの情報を取得してください。
| パラメータ | 説明 | 例 |
|---|---|---|
| ACME Server URL | 認証局のACMEエンドポイントURL | https://acme.example-ca.com/acme/directory |
| Key ID | EAB用のキーID(アカウント識別子) | abc123def456... |
| HMAC Key | EAB用のHMAC秘密鍵(Base64URL形式) | XyZ9a1B2c3D4...(長い文字列) |
HMAC Key は秘密情報です。ファイルに保存する場合は所有者のみ読み取り可能な権限(
chmod 600)を設定してください。
STEP 4ファイアウォールの確認
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
STEP 5認証局(CA)の登録
SSLセキュアの認証局ACMEサーバに対して、EAB情報を使ってアカウントを登録します。
acme.sh --register-account \
--server https://acme.example-ca.com/acme/directory \
--eab-kid "<管理画面の Key ID>" \
--eab-hmac-key "<管理画面の HMAC Key>"
成功時の出力例
[info] Registering account: https://acme.example-ca.com/acme/directory
[info] Registered
[info] ACCOUNT_THUMBPRINT='xxxxxxxxxxxxxxxxxxxx'
STEP 6webroot ディレクトリの設定
ACMEチャレンジ用のパス(/.well-known/acme-challenge/)がHTTPで公開される必要があります。
チャレンジディレクトリの作成 共通
# ディレクトリを作成
sudo mkdir -p /var/www/html/.well-known/acme-challenge
# acme.sh の実行ユーザが書き込めるよう権限を付与
sudo chown -R $USER:$USER /var/www/html/.well-known
Apache の設定確認
# DocumentRoot を確認(例: /var/www/html)
sudo cat /etc/apache2/sites-enabled/000-default.conf
# DocumentRoot を確認(ファイル名は環境に合わせて読み替え)
sudo cat /etc/httpd/conf.d/vhost.conf
Nginx の設定確認・追記
# /etc/nginx/sites-available/your-domain の server ブロックに追記
location /.well-known/acme-challenge/ {
root /var/www/html;
}
sudo nginx -t && sudo systemctl reload nginx
# /etc/nginx/conf.d/your-domain.conf の server ブロックに追記
location /.well-known/acme-challenge/ {
root /var/www/html;
}
sudo nginx -t && sudo systemctl reload nginx
動作確認 共通
# テストファイルを配置してHTTPアクセスを確認
echo "ok" | tee /var/www/html/.well-known/acme-challenge/test.txt
curl http://your-domain.example.com/.well-known/acme-challenge/test.txt
# "ok" と表示されれば問題なし
# テストファイルを削除
rm /var/www/html/.well-known/acme-challenge/test.txt
🔴 RedHat系:SELinux の注意
403 エラーが出る場合は
403 エラーが出る場合は
sudo restorecon -Rv /var/www/html/.well-known/ を実行してください。
STEP 7証明書の取得(初回)
acme.sh --issue \
--server https://acme.example-ca.com/acme/directory \
-d your-domain.example.com \
-d www.your-domain.example.com \
--webroot /var/www/html
取得成功時の出力例
[info] Your cert is in: ~/.acme.sh/your-domain.example.com_ecc/your-domain.example.com.cer
[info] Your cert key is in: ~/.acme.sh/your-domain.example.com_ecc/your-domain.example.com.key
[info] The intermediate CA cert is in: ~/.acme.sh/your-domain.example.com_ecc/ca.cer
[info] And the full chain certs is in: ~/.acme.sh/your-domain.example.com_ecc/fullchain.cer
デフォルトの鍵タイプはECC(ec-256)です。RSAが必要な場合は
--keylength 2048 を追加してください。
STEP 8証明書のインストール(Webサーバへの配置)
acme.sh では証明書の取得(--issue)と、Webサーバへのインストール(--install-cert)を分けて行います。--reloadcmd に指定したコマンドは自動更新のたびに実行されます。
配置先ディレクトリの作成 共通
sudo mkdir -p /etc/ssl/your-domain
Apache の場合
acme.sh --install-cert \
-d your-domain.example.com \
--cert-file /etc/ssl/your-domain/cert.pem \
--key-file /etc/ssl/your-domain/privkey.pem \
--fullchain-file /etc/ssl/your-domain/fullchain.pem \
--reloadcmd "systemctl reload apache2"
# /etc/apache2/sites-available/your-domain-ssl.conf を作成
<VirtualHost *:443>
ServerName your-domain.example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/your-domain/cert.pem
SSLCertificateKeyFile /etc/ssl/your-domain/privkey.pem
SSLCertificateChainFile /etc/ssl/your-domain/fullchain.pem
</VirtualHost>
sudo a2enmod ssl
sudo a2ensite your-domain-ssl.conf
sudo systemctl reload apache2
acme.sh --install-cert \
-d your-domain.example.com \
--cert-file /etc/ssl/your-domain/cert.pem \
--key-file /etc/ssl/your-domain/privkey.pem \
--fullchain-file /etc/ssl/your-domain/fullchain.pem \
--reloadcmd "systemctl reload httpd"
# mod_ssl のインストール(未導入の場合)
sudo dnf install -y mod_ssl
# /etc/httpd/conf.d/your-domain-ssl.conf を作成
<VirtualHost *:443>
ServerName your-domain.example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/your-domain/cert.pem
SSLCertificateKeyFile /etc/ssl/your-domain/privkey.pem
SSLCertificateChainFile /etc/ssl/your-domain/fullchain.pem
</VirtualHost>
sudo systemctl reload httpd
Nginx の場合
acme.sh --install-cert \
-d your-domain.example.com \
--key-file /etc/ssl/your-domain/privkey.pem \
--fullchain-file /etc/ssl/your-domain/fullchain.pem \
--reloadcmd "systemctl reload nginx"
# /etc/nginx/sites-available/your-domain を編集
server {
listen 443 ssl;
server_name your-domain.example.com;
ssl_certificate /etc/ssl/your-domain/fullchain.pem;
ssl_certificate_key /etc/ssl/your-domain/privkey.pem;
}
sudo ln -s /etc/nginx/sites-available/your-domain /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
acme.sh --install-cert \
-d your-domain.example.com \
--key-file /etc/ssl/your-domain/privkey.pem \
--fullchain-file /etc/ssl/your-domain/fullchain.pem \
--reloadcmd "systemctl reload nginx"
# /etc/nginx/conf.d/your-domain-ssl.conf を作成
server {
listen 443 ssl;
server_name your-domain.example.com;
ssl_certificate /etc/ssl/your-domain/fullchain.pem;
ssl_certificate_key /etc/ssl/your-domain/privkey.pem;
}
# conf.d は自動読み込みのためシンボリックリンク不要
sudo nginx -t && sudo systemctl reload nginx
STEP 9自動更新の確認
acme.sh はインストール時に cron を自動登録します。設定を確認します。
# cron の確認(以下のような行が登録されていること)
crontab -l
# 例: 0 0 * * * "/home/user/.acme.sh"/acme.sh --cron --home "/home/user/.acme.sh"
# 手動で強制更新テスト
acme.sh --renew \
-d your-domain.example.com \
--server https://acme.example-ca.com/acme/directory \
--force
acme.sh は証明書の有効期限が残り30日を切った場合にのみ更新を実行します。
--force を付けると期限に関わらず強制更新できます。
3動作確認
# 取得済み証明書の一覧確認
acme.sh --list
# OpenSSL での証明書内容確認
openssl x509 -in /etc/ssl/your-domain/cert.pem \
-noout -text | grep -E "Subject:|Issuer:|Not After"
# HTTPS 接続確認
curl -v https://your-domain.example.com 2>&1 | grep -E "SSL|subject|expire"
4トラブルシューティング
| エラー内容 | 原因 | 対処法 |
|---|---|---|
| Connection refused (port 80) | ファイアウォールが80番をブロック | 🟠 ufw allow 80/tcp / 🔴 firewall-cmd --add-service=http |
| Challenge failed: 404 | webrootパスの設定ミス | --webroot と DocumentRoot が一致するか確認 |
| Challenge failed: 403 | SELinux によるアクセス拒否(🔴 RedHat系) | restorecon -Rv /var/www/html/.well-known/ を実行 |
| EAB registration failed | Key ID / HMAC Key が誤り | SSLセキュア管理画面で再発行して再登録 |
| Permission denied on webroot | webrootへの書き込み権限不足 | chown -R $USER /var/www/html/.well-known を実行 |
| acme.sh: command not found | シェル再読み込み忘れ | source ~/.bashrc を実行 |
| cron が登録されていない | インストール時にエラーが発生 | acme.sh --install-cronjob を実行 |
詳細なエラーは
~/.acme.sh/acme.sh.log を参照してください。--debug オプションを追加すると詳細な出力が得られます。
5ディストリビューション別 主要パス・コマンド早見表
| 項目 | 🟠 Debian / Ubuntu | 🔴 RedHat系 |
|---|---|---|
| パッケージ管理 | apt |
dnf |
| Apache サービス名 | apache2 |
httpd |
| Apache 設定ディレクトリ | /etc/apache2/sites-available/ |
/etc/httpd/conf.d/ |
| Apache SSL モジュール | sudo a2enmod ssl |
sudo dnf install mod_ssl |
| Nginx 設定ディレクトリ | /etc/nginx/sites-available/ |
/etc/nginx/conf.d/ |
| ファイアウォール | ufw |
firewalld |
| SELinux | 通常無効 | 有効(要確認) |
| acme.sh インストール先 | ~/.acme.sh/(共通) |
|
| 証明書格納ディレクトリ | ~/.acme.sh/<domain>_ecc/(共通) |
|
| ログファイル | ~/.acme.sh/acme.sh.log(共通) |
|





