本文へ移動
ハック!でAI

公開直後はなぜ狙われやすい? SSL 証明書を発行した直後に潜む CT スキャンとは

佐々木 航@w_sasakiwith Claude Code読了 約16分
発行から 3 秒で最初のアクセスが届いた。証明書の発行の前後に新しく現れた送り元の数の棒グラフ。発行の直後の 5 秒に集まっている

この記事でわかること

  • 証明書を取ると、ホスト名が公開の記録に載るしくみ
  • 発行から何秒で、どんな相手が、何を取りに来たかの実測
  • 公開の前にできる 6 つの対策と、効かないこと

確認した環境: 編集部の運営会社の検証用のサーバー 1 台で、証明書 27 枚の発行の前後のアクセスの記録を集計(2026年9月28日〜10月12日)/ CT の記録の流れ 10,000 件の切り取り(10月12日)/ RFC 6962・Chrome と Apple の CT の決まり・Let's Encrypt の説明は 2026年10月12日に確認

AI でアプリやサイトを作り、自分のサーバーで公開すると、まだだれにも URL を教えていないのに、知らない相手からのアクセスが届くことがあります。この記事では、その理由の 1 つと考えられる「証明書の公開の記録」のしくみと、編集部が測った発行の直後のアクセス、公開の前にできる対策を説明します。

証明書を取ると、ホスト名が公開の記録に載る

Certificate Transparency(CT)とは

Certificate Transparency(CT)は、発行された証明書を、公開の記録(ログ)に残す仕組みです。2013年の RFC 6962 で定められ、2021年に第 2 版の RFC 9162 が出ています。目的は、誤って発行された証明書や不正に発行された証明書に、だれでも気づけるようにすることです。

4 つの枠が矢印でつながる。1 サイトの持ち主が証明書を頼む。2 認証局が、ホスト名の入った事前の証明書を CT の記録先に届ける。3 公開の記録は、だれでも読める。新しく載ったホスト名も記録から分かる。4 約 3 秒後に最初のアクセス。トップページを開き、秘密のファイルや管理画面を探す。下に、URL を教えていなくてもホスト名は記録に載る、Chrome と Apple の製品は記録に載っていない証明書を信頼しない、相手がどこで名前を知ったかはアクセスの記録に残らず、3 から 4 へのつながりは断定できない、という説明
証明書の発行から、最初のアクセスが届くまで。1〜3 は公式の資料によるしくみ、4 は編集部の実測(サーバー 1 台・22 回の発行の中央値)撮影・作図: 編集部

発行の手順は、次のとおりです。

  1. サイトの持ち主が、認証局(証明書を発行する組織)に発行を頼みます。
  2. 認証局は、発行の前に、ホスト名の入った「事前の証明書」を CT の記録先に届けます。記録先は、受け取った時刻に署名を付けた SCT(署名付き証明書タイムスタンプ)を返します。
  3. 認証局は、SCT を入れた証明書を発行します。

無料の認証局の Let's Encrypt は、発行するすべての証明書を CT の記録に届ける、と説明しています。編集部が確かめた 22 枚の証明書にも、記録先 2 か所の SCT が入っていました。

記録は、だれでも読める

CT の公式サイトは、記録について「だれでも問い合わせできる」と説明しています。RFC 6962 も、記録を見張る役(モニター)が、気になる証明書が出ていないかを確かめる、と定めています。もともとは、自分のドメインに知らない証明書が出ていないかを確かめるための仕組みです。

同じ記録から、新しく載ったホスト名を知ることもできます。載った直後のホスト名を調べに来る動きを、この記事では CT スキャンと呼びます。

記録に載るまでの時間は、RFC 6962 では、SCT を返してから、記録先ごとに決めた時間以内です。新しい方式の記録先(Static CT API)は、記録に並べてから SCT を返す作りです。編集部のサーバーに何秒でアクセスが届いたかは、あとの実測で示します。

「載せない」は選べない

  • Chrome の決まり: 公開で信頼されるすべての TLS 証明書は、CT の条件を満たさないと検証に通りません。
  • Apple の決まり: 条件を満たさない証明書では、TLS の接続が失敗します。

記録に届けていない証明書は、Chrome や Apple の製品(Safari など)で信頼されません。公開のサイトでは、記録に載せないことは選べません。

載るのは、証明書に書いた名前

記録に載るのは、証明書そのものです。証明書に書いたホスト名は、そのまま読めます。ページの中身や、URL のパス(/ から後ろの部分)は載りません。

ワイルドカード証明書(*.example.com のように、サブドメインを 1 枚でまとめて受ける証明書)では、載るのは *.example.com という形です。個々のサブドメインの名前は載りません。編集部の運営会社のワイルドカード証明書 2 枚でも、載っている名前は、*. の付いた名前と付かない名前の 2 つだけでした。

左はホスト名ごとに証明書を取る場合。app.example.com、staging.example.com、admin.example.com の 3 つが記録に載る。右はワイルドカード証明書 1 枚にまとめる場合。載るのは *.example.com と example.com で、staging.example.com などの個々の名前は載らない。下に 3 つの注意。「*.」の形は載る、載らないのは証明書の記録だけ、Let's Encrypt では DNS で持ち主を確かめる方式(DNS-01)が要る
ホスト名ごとに証明書を取る場合と、ワイルドカード証明書にまとめる場合の、記録に載る名前の違い撮影・作図: 編集部

実測 1: 記録の流れは、1 秒に約 500 件

編集部の運営会社は、自社のドメインに知らない証明書が出ていないかを見張るために、公開の CT の記録を受け取っています。そこに残っていた最新の 10,000 件を、2026年10月12日に集計しました。

10,000 件が約 20 秒のあいだに届いた。1 秒あたり平均で約 500 件。ワイルドカードの名前を含む記録は 34%(3,365 件)。1 件に入っている名前の数は平均 1.65 個、中央値 1 個。最後の 7 秒間の 1 秒ごとの件数は 381、727、637、720、573、914、720 件
CT の記録の流れの速さ。最新の 10,000 件は、約 20 秒で届いていた(2026年10月12日)撮影・作図: 編集部

平均では、1 秒に約 500 件です。最後の 7 秒間は、1 秒に 381〜914 件でした。

横棒グラフ。Let's Encrypt 6,014 件(60%)、Google Trust Services 1,688 件(17%)、Amazon 1,112 件(11%)、ZeroSSL 395 件(4%)、GoDaddy 266 件(3%)、DigiCert 206 件(2%)、SSL Corporation 143 件(1%)、Microsoft 90 件、Sectigo 48 件、IdenTrust 15 件、そのほか 23 件
記録に載っていた証明書の、認証局ごとの件数(最新 10,000 件・約 20 秒の切り取り)撮影・作図: 編集部

発行した認証局は、Let's Encrypt が 6,014 件(60%)でした。個人や小さな会社が自動で取る証明書も、この流れに載ります。

横棒グラフ。test 144 件、api 136 件、dev 91 件、staging 73 件、admin 56 件、mail 48 件、demo 28 件、portal 18 件、shop 15 件、login 12 件、internal 11 件、beta 10 件、vpn 9 件、db 8 件、gitlab 8 件、stg 6 件。検証用らしい語(test・dev・staging・demo・beta・stg)は合わせて 352 件
ホスト名の区切り(サブドメイン)に入っていた語の件数。オレンジ色は、検証用らしい語撮影・作図: 編集部

ホスト名に入っていた語を数えると、test が 144 件、dev が 91 件、staging が 73 件、admin が 56 件ありました。名前を読むだけで、公開の前の物や管理用の物だと推測できます。test や admin のような名前にしても、隠れることにはなりません。

実測 2: 発行から 3 秒で、最初のアクセスが届いた

次に、証明書を発行したあと、知らない相手のアクセスがいつ届くかを数えました。編集部の運営会社の、検証用のサイトを置いているサーバー 1 台の記録です。

最初のアクセスまでは中央値 3 秒(幅 1〜6 秒)。22 回のうち 21 回は 5 秒以内。発行と関係のない時刻で数えたときの中央値は 104 秒。棒グラフは、発行の前 60 秒が合わせて 10 か所、発行から 0〜5 秒が 38 か所、5〜10 秒が 11 か所
発行の前 60 秒から、あと 120 秒までに新しく現れた送り元の数(5 秒ごと・22 回の合計)。発行の直後の 5 秒に集まっている撮影・作図: 編集部
  • 最初のアクセスまで: 中央値は 3 秒、幅は 1〜6 秒でした。22 回のうち 21 回は、5 秒以内です。
  • 基準との比べ: 発行と関係のない時刻で数えると、中央値は 104 秒でした。5 秒以内だったのは、2,000 回のうち 4.7% です。
  • 直後の 5 秒: 発行の前の 60 秒間に新しく現れた送り元は、22 回を合わせて 10 か所でした。発行から 0〜5 秒の 5 秒間だけで、38 か所です。

ホスト名ごとの記録が残っていたあるホスト名では、編集部が動作を確かめるために送ったアクセス(発行の 12 秒後)よりも先に、知らない相手のアクセス(3 秒後)が届いていました。

発行から 10 分に新しく現れた送り元は、1 回あたりの中央値で 15.5 か所(ふだんは 4 か所)。60 分では 48 か所(ふだんは 24 か所)。5 分ごとの棒グラフは、発行の前が 61、80、51、68、51、54 か所。発行のあとが 229、116、88、92、75、56、72、60、52、45、43、67 か所
発行の前 30 分から、あと 60 分までに新しく現れた送り元の数(5 分ごと・22 回の合計)撮影・作図: 編集部

発行から 5 分間に新しく現れた送り元は 229 か所で、直前の 30 分の平均(5 分あたり 61 か所)の約 3.8 倍でした。1 回の発行あたりでは、10 分で 15.5 か所(ふだんは 4 か所)、60 分で 48 か所(ふだんは 24 か所)です。30 分を過ぎると、ふだんの水準に近づきます。

来たのは、仕組みで動いているとみられる相手

最初の 60 秒に現れた送り元は、22 回を合わせて延べ 67 でした。名乗り(User-Agent。アクセスする側が自分で書くソフトの名前)で分けると、次のとおりです。

  • 巡回や調査を名乗るもの: 31。名乗りに、巡回の名前や連絡先の URL を書いているものです。同じ名前の巡回が、22 回のどれでも 60 秒以内に来ていました。
  • ふつうのブラウザと同じ名乗り: 33。このうち 1 つの送り元は、22 回のうち 20 回に現れました。人が開いたとは考えにくく、仕組みで動いているとみられます。
  • AI の巡回を名乗るもの: 3。

検索エンジンを名乗るアクセスは、あとで述べる 3 つのホスト名の最初の 24 時間には、1 件もありませんでした。

CT の記録を見て来た、と考える理由

アクセスの記録には、相手がどこでホスト名を知ったかは残りません。CT の記録を見て来た、と断定はできません。そう考える根拠は、発行の直後に集まっていること(上の、発行と関係のない時刻との比べ)と、次の 3 つです。

  • DNS の登録は増えていない: 28 個のうち 27 個は、どんな名前でも同じサーバーに届く設定(ワイルドカードの DNS)で受けています。新しい名前を足しても、DNS の登録は増えません。
  • まだだれにも伝えていない: 発行の数秒後は、URL をどこにも書いていない時点です。
  • 証明書の名前がそのまま届いた: 22 回のうち 21 回で、発行から 60 分以内に、送り元が「前に開いていたページ」(Referer)としてそのホスト名を伝えてきたアクセスがありました。名前を 2 つ書いた証明書では、5 秒後に、2 つの名前の両方が届いています。

ホスト名を知らなくても届く、遠隔ログイン(SSH)への試しの記録は、公開したサーバーは、何秒で攻撃される? 1 週間の記録と、おとり(ハニーポット)の使い方にまとめています。

最初の 24 時間と、そのあと

ホスト名ごとの記録が発行の直後から残っていた 3 つのホスト名(A・B・C)で、そのあとを数えました。名前を指定したアクセスだけが入る記録です。

最初の 24 時間は、ホスト名 A が 1,116 件(80 か所)、B が 758 件(34 か所)、C が 449 件(60 か所)。3 つの合計の棒グラフは、1 日目 2,323 件、2 日目 556 件、3 日目 108 件、4 日目 47 件、5 日目 44 件、6 日目 10 件、7 日目 50 件、8 日目 354 件、9 日目 30 件、10 日目 32 件、11 日目 13 件、12 日目 51 件、13 日目 10 件、14 日目 12 件
3 つのホスト名に届いた外からのアクセスの件数(発行からの日数ごと)。最初の 24 時間に集まり、そのあとも続く撮影・作図: 編集部
  • 最初の 1 時間: A は 177 件(27 か所)、C は 94 件(27 か所)でした。B の記録は、発行の 33 分後から残っています。
  • 最初の 24 時間: 449〜1,116 件(中央値 758 件)、送り元は 34〜80 か所でした。
  • 14 日間: 3 つの合計は 3,640 件で、64% が最初の 24 時間に届いています。3 日目からは 1 日に 10〜108 件ですが、8 日目のように、1 つの送り元がまとめて送ってくる日があります。

発行から 1 週間以上たっていた別の 5 つのホスト名にも、同じ期間に 1 日あたり 11 件(中央値)が届いていました。70 日分のうち 8 日は、100 件以上です。名前は記録に残り続け、日がたってもアクセスは続いていました。

取りに来た物の 59% は、秘密のファイル

横棒グラフ。秘密のファイルを探す 1,371 件(59%。/.env や /.git/config など 306 種類のパス)、トップページを開く 563 件(24%)、ログイン画面・管理画面・PHP を探す 212 件(9%)、そのほか 155 件(7%)、定番のファイルを見る 22 件(1%)
発行から 24 時間に届いたアクセス 2,323 件を、取りに来た物で分けた内訳(分け方は編集部の判断)撮影・作図: 編集部
  • 秘密のファイルを探す(59%): パスワードや鍵を書く設定ファイル(.env)を探すものが 1,099 件で、パスは 222 種類ありました。/.env.production や /api/.env のように、名前や置き場を少しずつ変えて試しています。プログラムの履歴(.git)を探すものは 38 件です。
  • トップページを開く(24%): 何が動いているかを調べています。
  • ログイン画面・管理画面・PHP を探す(9%): /login や /info.php などです。WordPress に関係するパスは 88 件でした。

入口に認証(Basic 認証。ブラウザが ID とパスワードをたずねる、Web サーバーの認証)を付けていたホスト名の 1 つでは、14 日間のアクセスの 98% が「認証が必要」の応答で止まっていました。3 つとも、秘密のファイルの中身が返ったものはありません。

AI の道具の鍵や設定も探されている

横棒グラフ。/.env.anthropic 122 件、/.env.openai 85 件、/.claude/settings.local.json 78 件、/.claude/settings.json 78 件、/.well-known/mcp/server-card.json 40 件、/.well-known/mcp 40 件、/mcp 29 件、/.anthropic/config.json 23 件、/mcp/ 23 件、/api/mcp 23 件。鍵や設定のファイルを探すものが 519 件(47 種類のパス)、AI の道具とつなぐ窓口(MCP)を探すものが 156 件
AI の道具に関係するパスへのアクセスの上位 10 個(2026年9月28日〜10月12日・サーバー 1 台)撮影・作図: 編集部

同じサーバーの全部の記録を見ると、AI の道具に関係するパスへのアクセスが、この期間に 675 件(122 か所から)ありました。

  • 鍵や設定のファイルを探すもの: 519 件です。AI の API の鍵が入っていそうな名前(/.env.anthropic、/.env.openai)や、AI のコーディングの道具の設定ファイル(/.claude/settings.json)を取りに来ています。
  • AI の道具とつなぐ窓口(MCP)を探すもの: 156 件です。

鍵や設定の中身が返ったものは、ありませんでした。AI でアプリを作るときは、鍵を書いたファイルや道具の設定のフォルダを、公開されるフォルダに置かないでください。秘密情報の扱いは、AI コーディングの道具を安全に使う(権限・秘密情報・学習の設定)にまとめています。

対策: 手間の小さい順に 6 つ

ホスト名が記録に載ることは変えられません。載る前提で、見られて困る物を無くします。

表。1 準備ができてから証明書を取る: 作りかけの画面や初期設定を発行の直後に見られない。ホスト名が記録に載ることは変わらない。2 ホスト名に秘密や管理用の言葉を入れない: 名前から中身や社内の事情を読み取られない。調べに来るアクセスは減らない。3 公開の前から認証や送り元の制限を付ける: 探りのアクセスを入口で止める。弱いパスワードや設定の誤りは守れない。4 検証用はワイルドカード証明書にまとめる: 個々のサブドメインの名前が記録に載らない。「*.」の形は載り、名前がほかから知られれば届く。5 初期設定のままの管理画面やインストーラーを置かない: 最初に来た相手に初期設定を済まされない。古いソフトの弱点は更新で直す。6 自分のドメインの発行を見張り、CAA レコードを設定する: 知らない証明書に気づけ、発行できる認証局をしぼれる。調べに来るアクセスは止まらない
6 つの対策と、それぞれの効くこと・効かないこと撮影・作図: 編集部
  1. 準備ができてから証明書を取る: 編集部の実測では、証明書を取った数秒後に最初のアクセスが届きました。認証と初期設定を済ませてから、発行のコマンドを動かします。
  2. ホスト名に、秘密や管理用の言葉を入れない: 顧客の名前、公開の前の商品名、admin や internal のような言葉です。記録は追記だけの作りで、載った名前は消せません。
  3. 公開の前から、認証や送り元の制限を付ける: 検証用のサイトには、Basic 認証か、送り元の IP アドレスの制限を付けます。
  4. 検証用は、ワイルドカード証明書にまとめる: 個々の名前が記録に載らなくなります。Let's Encrypt では、DNS に確かめ用の値を書く方式(DNS-01)でだけ発行できます。*. の形は載るので、サブドメインがあることは分かります。
  5. 初期設定のままの管理画面やインストーラーを置かない: インストールの途中の画面を置いたままにすると、先に開いた相手に設定を済まされるおそれがあります。編集部のサーバーにも、インストーラーのパスを探すアクセスが、この期間に 43 件届いていました。
  6. 自分のドメインの発行を見張る: 次の節で説明します。

自分のドメインを見張る

  • 検索する: crt.sh は、公開の CT の記録を検索できるサイトです。自分のドメインを入れて、どの名前が載っているかを確かめます。
  • 知らせを受ける: Cert Spotter などの見張りの道具は、登録したドメインに覚えのない証明書が出たら知らせます。CT の公式サイトに、道具の一覧があります。料金や条件は、それぞれの公式のページで確かめてください。
  • 発行できる認証局をしぼる: DNS の CAA レコードに、証明書を発行してよい認証局を書きます。認証局は、発行の前にこのレコードを確かめます。Let's Encrypt だけを許す例は、次のとおりです。
テキスト
example.com.  IN  CAA  0 issue "letsencrypt.org"

見張りと CAA では、調べに来るアクセスは止まりません。1〜5 と組み合わせます。

AI の道具を動かすサーバーの守り方は、サーバーで AI を動かすメリットとは? VPS で使う code-serverにまとめています。

まとめ

参考にした公式の情報

XFacebookはてブLINE

執筆者

佐々木 航@w_sasaki

with Claude Code

プロフィール

株式会社Game 代表取締役。工学部出身で、21歳で起業してからシステム会社の経営一筋で8期目。アプリの受託開発から始め、いまはAIを使ったシステムソリューションを手がけています。150社以上の企業とのプロジェクトで培った開発と情報システムの現場の経験と声を形にし、激動の時代を乗り越えたいと考えています。

この記事は、Claude Code を使って執筆しました。画面の画像は、検証環境で実際に操作して撮影したものです(引用の画像は出典を記載しています)。内容の誤りはお問い合わせからお知らせください。

あわせて読みたい