クイック解決策
サイトを閲覧中にこのエラーが表示された場合、ユーザー側でできることはほとんどありません。問題はコンピューターではなくサーバー側にあります。サイト運営者の場合、最も手っ取り早い解決策はSSL証明書の再発行です。Let's Encrypt、DigiCert、Sectigoなどの主要な認証局(CA)は、現在デフォルトで必要なSCT(署名付き証明書タイムスタンプ)データを含めています。通常、再発行を行うだけで数分以内にエラーは解消されます。
なぜChromeはサイトをブロックするのか?
証明書の透明性(CT)は、認証局レベルでの不正や誤発行を防ぐためのセキュリティ対策です。これは公開監査証跡として機能します。2018年7月以降、Google Chromeはすべての公開SSL証明書が、少なくとも2つまたは3つの公開監査ログに記録されることを義務付けています。Chromeが証明書のログ記録の証明を確認できない場合、ユーザーを保護するために接続を遮断します。
サイトでこのエラーが発生する主な理由は以下の通りです:
- 認証局が、必須の公開ログに証明書を登録し損ねた。
- サーバーの設定ミスにより、TLSハンドシェイク中にSCTデータが削除されている。
- CTが義務化される前に発行された古い証明書を使用している。
- Chromeがパブリックドメインであると認識しているドメインに対して、プライベートまたは内部認証局を使用している。
エラーの修正方法
1. SSL証明書の再発行
ほとんどの場合、証明書にSCTが埋め込まれていないことが原因です。証明書を再発行することで、認証局に新しいタイムスタンプを生成させることができます。Let's Encryptを使用している場合は、次のコマンド1つで強制的に更新できます:
sudo certbot renew --force-renewal
DigiCertやNamecheapなどの商用認証局の場合は、管理画面から「再発行(Reissue)」または「差し替え(Replace)」を選択してください。通常は無料です。プロバイダーに設定項目がある場合は、「Certificate Transparency(証明書の透明性)」オプションが有効になっていることを確認してください。
2. 内部/プライベート認証局用のポリシー設定
プライベート認証局は公開サーバーにログを記録しないため、内部ドメインでこの問題が発生することがよくあります。Chromeが社内ネットワークに対して誤って公開要件を適用してしまう場合があります。管理下のワークステーションでこれを解決するには、特定の内部URLに対してCTチェックをスキップするようChromeに指示する必要があります。
Windows(レジストリエディタ):
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome に移動します。CertificateTransparencyEnforcementDisabledForUrls という名前のキーを作成します。次に、ドメインの文字列値を追加します:
"1" = "internal.corp.com"
"2" = "*.dev.local"
macOS(ターミナル):
defaults write com.google.Chrome CertificateTransparencyEnforcementDisabledForUrls -array "internal.corp.com" "*.dev.local"
3. NginxまたはApacheの証明書チェーンの確認
証明書自体に問題はなくても、サーバーがブラウザに必要な情報をすべて送信していない場合があります。OCSPステープリングを使用している場合、サーバーがSCTの転送に失敗している可能性があります。Webサーバーの設定が、中間証明書を含む「フルチェーン(full chain)」ファイルを指していることを確認してください。
Nginxの場合、設定は以下のようになります:
server {
listen 443 ssl;
# cert.pem ではなく fullchain.pem を使用してください
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}
検証:実際に修正されたか?
ブラウザの表示だけでなく、手動でSCTデータを確認できます。
方法A:Chromeデベロッパーツールを使用する
- サイトを開き、
F12キーを押します。 - 「Security(セキュリティ)」タブに移動します。
- 「View Certificate(証明書を表示)」をクリックします。
- 「Details(詳細)」タブを開き、OID
1.3.6.1.4.1.11129.2.4.2を探します。これがSCTの技術的なIDです。ここにタイムスタンプのリストが表示されていれば、Chromeは正常に認識します。
方法B:OpenSSLを使用する
サーバーがSCTリストを正しくブロードキャストしているかを確認するには、次のコマンドを実行します:
openssl s_client -connect yourdomain.com:443 -status | grep -i "SCT"
出力が空の場合、サーバーまたは証明書に必要な透明性データがまだ不足しています。
まとめ
NET::ERR_CERTIFICATE_TRANSPARENCY_REQUIRED エラーはバグではなく、セキュリティの壁です。公開ウェブサイトの場合は、証明書の再発行が最善策です。社内の企業ツールについては、Chromeのポリシーを使用してドメインをホワイトリストに登録してください。恒久的な対策として --ignore-certificate-errors を使用しないでください。ユーザーが中間者攻撃に対して脆弱な状態になってしまいます。

