2026年9月29日

2026年9月29日

ZeroSSL のDCV認証方法|メール・HTTPファイル・CNAMEの選び方と通らないときの確認手順

ZeroSSL で証明書を発行するときのドメイン所有確認(DCV: Domain Control Validation)は、メール、HTTP ファイルアップロード、DNS の CNAME レコードの3通りから選べます。Web サーバーに手が届くなら HTTP ファイル、ワイルドカード証明書や CDN 配下のサイトなら CNAME が扱いやすく、この記事を読めば方式の選び方と「検証が通らない」ときの原因の切り分けまでできるようになります。

なお、管理画面の表記や無料プランで発行できる枚数などは変更されることがあります。本文は(2026年10月現在)の一般的な流れとして読み、細部は ZeroSSL の公式ドキュメントで確認してください。

DCV の3方式と選び方

ZeroSSL の Web ダッシュボードで証明書を作成すると、最後に「どの方法でドメインを確認するか」を選ぶ画面が出ます。どれを選んでも発行される証明書の種類(DV 証明書)は同じで、違うのは「何を使って所有を示すか」だけです。

メール認証

admin@ webmaster@ postmaster@ などドメイン管理者向けとされる決まったアドレスに確認メールが届き、記載のリンクやコードで承認する方式です。サーバー作業が要らない反面、そのアドレスを実際に受信できる環境が必要です。独自ドメインでメールを運用していない場合や、受信がスパム判定で埋もれる場合は向きません。候補となるアドレスの範囲は画面で示されるので、その中から受信できるものを選びます。

HTTP ファイルアップロード

指定されたテキストファイルをダウンロードし、/.well-known/pki-validation/ 配下に置いて、ZeroSSL のサーバーから取得できる状態にする方式です。WordPress サイトならドキュメントルート(wp-config.php があるディレクトリと同じ階層が多い)に .well-known/pki-validation ディレクトリを作って置きます。

手軽ですが、次のような環境ではつまずきやすい方式です。

  • HTTP から HTTPS への強制リダイレクトや、www の有無のリダイレクトがかかっている
  • Cloudflare などの CDN やリバースプロキシがファイルの取得を横取りしている
  • WAF やセキュリティプラグインが見慣れないパスへのアクセスを遮断している

CNAME(DNS)認証

指定された名前と値の CNAME レコードを DNS に追加する方式です。Web サーバーの状態に左右されず、ワイルドカード証明書(*.example.com)ではこの方式が前提になります。DNS の反映待ちが発生しますが、検証用レコードを残しておけば更新時に再利用しやすいという利点もあります。

迷ったら、サーバーを自分で触れて単一ドメインなら HTTP ファイル、ワイルドカードや CDN 経由のサイト、または Web サーバーに直接触れないなら CNAME、と考えると判断しやすくなります。

HTTP ファイル認証の手順と確認方法

ファイルを置いたら、検証ボタンを押す前に自分で取得できるか確かめます。ZeroSSL 側で失敗すると、再試行までに時間がかかる場合があるためです。

# ファイル名・パスはダッシュボードに表示されたものに置き換える
curl -i http://example.com/.well-known/pki-validation/XXXXXXXXXXXX.txt

確認するポイントは3つです。

  1. ステータスが 200 であること。301 や 302 が返るならリダイレクトが原因の可能性があります
  2. 本文がダウンロードしたファイルの中身と一致していること(改行や BOM が混ざっていないか)
  3. Content-Type が HTML になっていないこと。WordPress の 404 ページが返っているとこうなります

Nginx で HTTPS への全体リダイレクトを設定している場合は、検証用パスだけリダイレクト対象から外します。

server {
    listen 80;
    server_name example.com www.example.com;

    # 検証用ファイルだけは HTTP のまま返す
    location ^~ /.well-known/pki-validation/ {
        root /var/www/html;
        default_type text/plain;
        try_files $uri =404;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

設定を変えたら sudo nginx -t で文法を確認してから sudo systemctl reload nginx で反映します。Apache で .htaccess によるリダイレクトをしている場合は、リダイレクトの RewriteRule より前に、このパスを除外する条件(RewriteCond %{REQUEST_URI} !^/\.well-known/)を入れます。本番設定を触る前に、元のファイルのバックアップを取っておいてください。

CNAME 認証の手順と確認方法

ダッシュボードには、アンダースコアで始まる長い名前と、その向き先となる値が表示されます。DNS 管理画面に入力するときの典型的なミスは、ゾーン名の二重付与です。管理画面によっては名前欄にゾーン名が自動で付くため、_abc123.example.com と全部入力すると実際には _abc123.example.com.example.com になってしまいます。

登録後は、公開 DNS から見えているかをコマンドで確かめます。

# 名前はダッシュボードの表示に置き換える
dig +short CNAME _abc123.example.com @1.1.1.1
dig +short CNAME _abc123.example.com @8.8.8.8

値が表示されれば登録は成功です。何も返らない場合は、名前の二重付与、別の DNS サービスで編集している(ネームサーバーが別の事業者を向いている)、TTL による反映待ち、のどれかを疑います。ネームサーバーは dig +short NS example.com で確認できます。

Cloudflare を使っている場合、検証用の CNAME はプロキシを通さない「DNS のみ」で登録します。プロキシを有効にすると CNAME が外から見えなくなり、検証が通りません。

検証が通らないときの原因(多い順)

失敗したときは、選んだ方式に関係なく次の順で確認すると早く原因にたどり着けます。

  1. リダイレクトやキャッシュで別の応答が返っている(HTTP 方式)

curl -i で実際の応答を見るのが最短です。CDN を挟んでいるならキャッシュの削除や、一時的に CDN を経由しない設定も検討します。

  1. DNS の入力ミスと反映待ち(CNAME 方式)

前述の dig で、複数の公開リゾルバーから値が見えるかを確認します。

  1. CAA レコードが ZeroSSL を許可していない

dig CAA example.com で CAA レコードがあるか調べます。CAA が設定されていて許可された認証局に ZeroSSL の発行元が含まれていないと、DCV が成功しても発行できません。ZeroSSL の証明書は Sectigo の基盤で発行されるため、公式ドキュメントでは sectigo.com を許可する設定が案内されています。CAA が無ければこの項目は関係ありません。

  1. ドメインの綴りや対象ホスト名の違い

www 付きと無しは別のホスト名です。両方を証明書に含めるなら、両方の検証が必要になる場合があります。

  1. メールが届かない(メール方式)

迷惑メールフォルダーと転送設定を確認し、改善しなければ別方式に切り替えるほうが早いことが多いです。

ACME クライアントで自動化する場合

Web ダッシュボードの DCV は手作業になるため、90日の証明書を更新し続けるのは負担になります。ZeroSSL は ACME にも対応しており、acme.sh や certbot から発行・更新できます。この場合の所有確認は、ダッシュボードの3方式ではなく ACME の HTTP-01 / DNS-01 チャレンジで行われます。

# acme.sh: アカウント登録(メールアドレスは自分のものに)
acme.sh --register-account -m you@example.com --server zerossl

# Webroot を使った発行(HTTP-01)
acme.sh --issue -d example.com -d www.example.com -w /var/www/html --server zerossl

certbot で使う場合は、ZeroSSL の管理画面で発行できる EAB(External Account Binding)の認証情報を指定します。

certbot certonly --webroot -w /var/www/html -d example.com \
  --server https://acme.zerossl.com/v2/DV90 \
  --eab-kid your-eab-kid --eab-hmac-key your-eab-hmac-key

EAB の値は秘密情報として扱い、リポジトリやチャットに貼らないでください。自動更新を組んだら certbot renew --dry-run などで更新が通るかを事前に試し、期限切れを外部の監視でも確認できるようにしておくと安心です。

まとめ

  • ZeroSSL の DCV はメール・HTTP ファイル・CNAME の3方式。サーバーを触れるなら HTTP ファイル、ワイルドカードや CDN 配下なら CNAME が扱いやすい
  • HTTP 方式は検証ボタンの前に curl -i で 200 と中身を確認し、リダイレクトから検証用パスを外す
  • CNAME 方式はゾーン名の二重付与と Cloudflare のプロキシ設定に注意し、dig で公開 DNS から見えるか確かめる
  • CAA レコードがある場合は ZeroSSL の発行元が許可されているかを確認する
  • 継続運用するなら ACME クライアントで自動化し、更新の試験と期限監視をセットにする

お気軽にご相談ください

お見積りへ お問い合わせへ
▲