ACME SSL 導入ガイド
ACMEプロトコルを使用したSSL証明書の自動取得・更新手順を解説します。
お使いのサーバー環境に合わせてガイドをお選びください。
前提条件
- root または sudo 権限のあるアカウントでサーバーにアクセスできること
- 対象サーバーのポート80(HTTP)またはポート443(HTTPS)が外部からアクセス可能であること
- 証明書を適用するドメインのDNSが、対象サーバーのIPアドレスに正しく設定されていること
- ACME対応のサーバー環境:VPS / クラウド / オンプレミス(共用サーバーは非対応)
以降のセットアップで、ダッシュボードに表示される以下の情報が必要になります:
EAB KID— アカウント識別キーEAB HMAC Key— 認証用シークレットキーACME Server URL— ACMEディレクトリURL(例:https://acme.sectigo.com/v2/DV)
Apache / NGINX on Linux
NGINX および Apache の両方で、ACMEクライアント「Certbot」を使用して証明書を自動取得・設定できます。OSのroot権限が必要です。
Debian / Ubuntu 系
Certbot のインストールには主に apt と snap の2つの方法があります。
方法A: apt パッケージマネージャー
パッケージリストを更新
sudo apt update
Certbot とWebサーバープラグインをインストール
Apache:sudo apt install certbot python3-certbot-apache
NGINX:sudo apt install certbot python3-certbot-nginx
方法B: snap パッケージマネージャー(推奨)
snapd を最新に更新
sudo snap install core sudo snap refresh core
Certbot をインストール
sudo snap install --classic certbot
シンボリックリンクを作成
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Red Hat / CentOS / AlmaLinux 系
方法A: dnf / yum パッケージマネージャー
EPEL リポジトリを有効化
sudo dnf install epel-release # または sudo yum install epel-release
リポジトリを更新
sudo dnf clean all && sudo dnf update # または sudo yum clean all && sudo yum update
Certbot とWebサーバープラグインをインストール
Apache:sudo dnf install certbot python3-certbot-apache
NGINX:sudo dnf install certbot python3-certbot-nginx
証明書の取得と自動設定
Certbot は自動モードでWebサーバーの設定まで行えます。以下はHTTPバリデーションを使用した例です。
自動インストール(証明書の取得 + Webサーバー自動設定)
sudo certbot --nginx --non-interactive --agree-tos \ --server <ACME_DIRECTORY_URL> \ --email <your-email> \ --eab-kid <EAB_KID> \ --eab-hmac-key <EAB_HMAC_KEY> \ --domain example.com \ --domain www.example.com \ --cert-name my-certificate
--nginxまたは--apache— Webサーバーの種別--non-interactive— 対話モードを無効化(cron/CI/CDでの利用向け)--server— ダッシュボードに表示されるACMEディレクトリURL--eab-kid/--eab-hmac-key— ダッシュボードで発行されるEABクレデンシャル--domain— 証明書を発行するドメイン(複数指定可)--cert-name— 証明書の管理用名称
Sectigo ACMEサーバーでの実行例
sudo certbot --nginx --non-interactive --agree-tos \ --email admin@example.com \ --server https://acme.sectigo.com/v2/DV \ --eab-kid YOUR_EAB_KID \ --eab-hmac-key YOUR_EAB_HMAC_KEY \ --domain example.com \ --domain www.example.com \ --cert-name my-example-cert
Apache の場合は --nginx を --apache に変更してください。
証明書更新後のWebサーバー再読み込み
証明書が更新されても、Webサーバーが新しい証明書を読み込むまでは古い証明書が使われ続けます。deploy-hook(更新成功時に実行されるコマンド)を設定して、更新後にWebサーバーを自動リロードする必要があります。
Certbot の場合(--deploy-hook)
--deploy-hook を指定すると、証明書の更新が成功した場合のみ、指定したコマンドが実行されます。
初回発行時に deploy-hook を設定する場合
NGINX:sudo certbot --nginx --non-interactive --agree-tos \
--server <ACME_DIRECTORY_URL> \
--email <your-email> \
--eab-kid <EAB_KID> \
--eab-hmac-key <EAB_HMAC_KEY> \
--domain example.com \
--cert-name my-certificate \
--deploy-hook "systemctl reload nginx"
Apache:sudo certbot --apache --non-interactive --agree-tos \
--server <ACME_DIRECTORY_URL> \
--email <your-email> \
--eab-kid <EAB_KID> \
--eab-hmac-key <EAB_HMAC_KEY> \
--domain example.com \
--cert-name my-certificate \
--deploy-hook "systemctl reload apache2"
RHEL系では apache2 の代わりに httpd を使用してください。
既存の証明書に後から deploy-hook を追加する場合
sudo certbot renew --cert-name my-certificate \ --deploy-hook "systemctl reload nginx"
一度設定した deploy-hook は、以降の自動更新時にも自動的に実行されます。設定は /etc/letsencrypt/renewal/ に保存されます。
acme.sh を使用する場合
acme.sh は軽量なACMEクライアントで、--install-cert コマンドで証明書の配置先と更新後のリロードコマンドを一括設定できます。
acme.sh のインストール
curl https://get.acme.sh | sh -s email=your-email@example.com
インストール後、シェルを再起動するか source ~/.bashrc を実行してください。
EABアカウント登録
acme.sh --register-account \ --server <ACME_DIRECTORY_URL> \ --eab-kid <EAB_KID> \ --eab-hmac-key <EAB_HMAC_KEY>
証明書の発行
--keylength 2048)で発行してください。
自動更新の DNS 委任ラベルは CSR から生成されます。RSA 鍵は毎回同一の CSR を生成するため委任が恒久化しますが、
EC 鍵(ec-256 等)は発行のたびに CSR が変わり委任が無効化され、更新に失敗します。
NGINX (webroot モード):acme.sh --issue \
--server <ACME_DIRECTORY_URL> \
-d example.com -d www.example.com \
--keylength 2048 \
-w /var/www/html
Apache (webroot モード):acme.sh --issue \
--server <ACME_DIRECTORY_URL> \
-d example.com -d www.example.com \
--keylength 2048 \
-w /var/www/html
スタンドアロンモード (ポート80を一時使用):acme.sh --issue \
--server <ACME_DIRECTORY_URL> \
-d example.com \
--keylength 2048 \
--standalone
証明書のインストールと自動リロード設定
--install-cert で証明書の配置先と --reloadcmd で更新後のリロードコマンドを設定します。この設定は保存され、以降の自動更新でも自動的に実行されます。
NGINX:acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.crt \
--reloadcmd "systemctl reload nginx"
Apache:acme.sh --install-cert -d example.com \
--key-file /etc/apache2/ssl/example.com.key \
--fullchain-file /etc/apache2/ssl/example.com.crt \
--reloadcmd "systemctl reload apache2"
自動更新の動作確認
設定が正しく行われていれば、証明書の更新と同時にWebサーバーの再読み込みも自動で行われます。
Certbot の確認
sudo certbot renew --dry-run
deploy-hook の設定を確認するには:cat /etc/letsencrypt/renewal/my-certificate.conf
acme.sh の確認
# 登録済み証明書の一覧と設定確認 acme.sh --list # cron エントリの確認(自動更新スケジュール) crontab -l | grep acme
acme.sh はインストール時に cron ジョブを自動登録し、毎日チェックを行います。期限が近い証明書のみ更新されます。
- Certbot —
--nginx/--apacheでWebサーバー設定を自動変更。--deploy-hookでリロードコマンドを登録。 - acme.sh — Webサーバー設定は手動。
--install-cert+--reloadcmdで証明書配置とリロードを管理。軽量で依存が少ない。
IIS on Windows
Windows IIS Server に ACME ベースのSSL証明書をインストールするには、Win-ACME(wacs.exe)を使用します。
前提条件
- リモートデスクトップ(RDP)等でサーバーへの管理者権限でのアクセスが可能であること
- IIS で対象ドメインのポート80バインディングが設定済みであること(デフォルト/ワイルドカードバインディングでは動作しません)
Win-ACME のセットアップ
- win-acme.com から最新版をダウンロード
- ZIPを
C:\Program Files\Win-ACMEに展開 - 展開先の
wacs.exeを実行して動作確認
SSL証明書のインストール
PowerShell を管理者として開き、以下を実行:
& "C:\Program Files\Win-ACME\wacs.exe" ` --source iis ` --host yourdomain.com ` --store certificatestore ` --installation iis ` --baseuri <ACME_DIRECTORY_URL> ` --eab-key-identifier <EAB_KID> ` --eab-key <EAB_HMAC_KEY> ` --accepttos
--baseuri— ダッシュボードの ACME Server URL(例:https://acme.sectigo.com/v2/DV/)--eab-key-identifier— EAB KID(短い方の文字列)--eab-key— EAB HMAC Key(長い方の文字列)--host— www と非www の両方を設定する場合:--host "mydomain.com,www.mydomain.com"
インストールの確認
https://でサイトにアクセスして証明書を確認- IIS Manager → サイト → バインド で、HTTPS(443)バインディングが追加されたことを確認
- スケジュールされた自動更新を確認:
& "C:\Program Files\Win-ACME\wacs.exe" --list --baseuri https://acme.sectigo.com/v2/DV/
注意:Win-ACME は ACMEサーバーごとに証明書を管理します。--baseuri を省略すると、インストール済みの証明書情報が表示されません。
ACME 自動更新オプション(通常証明書)
RapidSSL / GeoTrust / Sectigo などの通常証明書(ACME 非対応商品)に「ACME 自動更新オプション」を付けると、 当社の ACME サーバー経由で acme.sh / Certbot / Win-ACME から発行・更新を自動化できます。 接続情報(ACME Directory / EAB KID / EAB HMAC Key)は、ご契約後に ダッシュボードの契約詳細に表示されます。
EAB アカウント登録
契約詳細に表示される値をそのまま使用します。
acme.sh --register-account \ --server <ACME Directory(契約詳細に表示)> \ --eab-kid <EAB KID> \ --eab-hmac-key <EAB HMAC Key>
証明書の発行(鍵の再利用が必須)
更新のたびに鍵を作り直すと、DNS の再設定と再認証が必要になります。acme.sh は既定で鍵を再利用します。Certbot は --reuse-key を必ず指定してください。
acme.sh:acme.sh --issue \
--server <ACME Directory> \
-d example.com \
-w /var/www/html
Certbot:certbot certonly --webroot -w /var/www/html \
--server <ACME Directory> \
--reuse-key \
-d example.com
DNS 委任レコードの設定(初回のみ)
初回発行を開始すると、契約詳細に「DNS 設定(初回のみ)」として NS レコードが表示されます。 ドメインの DNS に一度だけ委任設定すれば、以降の更新時の認証(証明書ごとに変わる検証値の差し替え)は すべて当社側で自動処理されるため、再設定は不要です。
_<ハッシュ値>.example.com NS ns1.dcv.ssl-shop.jp _<ハッシュ値>.example.com NS ns2.dcv.ssl-shop.jp
OV 証明書の更新について
OV 証明書は発行に日数がかかるため、期限が近づくと当社側で更新分を先行発行します。 鍵を再利用していれば、クライアントの更新実行時には発行済みの証明書が即座に取得されます。 企業認証情報の再確認が必要な場合は、当社からご連絡します。
よくあるエラーと対処法
DNS解決エラー
DNS problem: NXDOMAIN looking up A for example.com
ドメインのDNS Aレコードが正しく設定されていないか、DNSの伝播が完了していません。dig や nslookup でDNSレコードを確認してください。
HTTPバリデーション失敗
Fetching http://example.com/.well-known/acme-challenge/... : Connection refused
ポート80がファイアウォールでブロックされているか、Webサーバーが正しくドキュメントルートを配信していません。ファイアウォール設定とVirtualHost設定を確認してください。
EABクレデンシャルエラー
Error creating new account: the server rejected our request with "urn:ietf:params:acme:error:unauthorized"
EAB KID または EAB HMAC Key が正しくありません。ダッシュボードからクレデンシャルを再確認し、コピー時に余分な空白が含まれていないか確認してください。
レート制限エラー
rateLimited: Too many requests
認証局のレート制限に達しました。しばらく待ってからリトライしてください。テスト時は --dry-run フラグを使用することを推奨します。
権限エラー
Permission denied: '/etc/letsencrypt/'
Certbot は root 権限で実行する必要があります。コマンドの先頭に sudo を付けてください。
証明書の自動更新が動作しない
certbot renew --dry-run でエラーが発生
sudo systemctl status certbot.timer でタイマーが有効か確認してください。cron の場合は crontab -l でエントリを確認します。
導入支援サービス
ロードバランサーへの設定、複数台環境への証明書配布など、
技術的にお困りの場合はお気軽にご相談ください。