NET::ERR_CERT_DATE_INVALIDの解決策:システム時計の狂いがSSLエラーを引き起こす理由

beginner🔒 SSL/TLS2026-04-30| Windows 10/11, Ubuntu, Debian, CentOS, macOS, Docker, WSL2, Chrome, Edge

Error Message

NET::ERR_CERT_DATE_INVALID
#ssl#security#sysadmin#wsl2#linux

突然のトラブル:すべてが動かなくなったとき

ローカルプロジェクトの開発に没頭していたとき、ChromeですべてのHTTPSサイトが突然「この接続ではプライバシーが保護されません」という壁に突き当たりました。エラーコードは NET::ERR_CERT_DATE_INVALID です。最初はGoogleやGitHubの証明書が同時に期限切れになったのかと思いましたが、そんなことはあり得ません。問題は私のシステムトレイにありました。時計が6時間近く遅れていたのです。

ブラウザは時間に非常に厳格です。SSL/TLS証明書の検証では、現在のシステム時刻と証明書の有効期間を照合します。最近の証明書の多くは最大有効期間が398日となっています。時計が数分でもずれると、ブラウザはセキュリティ保護のために通信を遮断します。

根本原因:なぜ時計がずれるのか

SSLの検証は単なる日付の確認だけではありません。これは「リプレイ攻撃」からあなたを守るための仕組みでもあります。攻撃者が古い漏洩した証明書を使用しても、コンピュータは現在の時刻を使ってそれを拒否します。

時計の同期が狂う原因には、いくつかのパターンがあります:

  • CMOS電池の寿命: 古いマザーボードでは、電源オフ時に時計を動かし続ける3Vのコイン電池が切れている可能性があります。
  • デュアルブートによるずれ: WindowsとLinuxではBIOS時刻の扱いが異なります。Windowsはローカル時刻(Local Time)を使用し、Linuxは協定世界時(UTC)を使用します。両者を切り替えて使用すると、5〜8時間のずれが生じることがよくあります。
  • WSL2のスリープ問題: Windows Subsystem for Linuxを使用している場合、ラップトップがスリープモードに入るとLinux側の時計が停止してしまうことがよくあります。
  • ファイアウォールによるブロック: 企業内のファイアウォールなどで、時刻同期(NTP)に必要なUDPポート123がブロックされている場合があります。

手動での修正:GUIによるクイック設定

すぐに直したい場合は、OSのインターフェースから強制的に同期を行います。

Windows 10/11

  • タスクバーの時計を右クリックし、日付と時刻の調整を選択します。
  • 時刻を自動的に設定するがオンになっていることを確認します。
  • 今すぐ同期をクリックします。失敗した場合は、インターネット接続を確認して再試行してください。

macOS

  • システム設定 > 一般 > 日付と時刻を開きます。
  • 日付と時刻を自動的に設定を一度オフにしてから、再度オンにします。
  • サーバーが time.apple.com に設定されていることを確認します。

プロの修正方法:ターミナルの活用

コマンドラインツールを使用すると、詳細な情報が得られます。同期が失敗した正確な理由も把握できます。

Windows (管理者権限のPowerShell)

Windows Time サービス(w32time)が時々ハングすることがあります。サービスをリセットすることで、通常はすぐに証明書エラーが解消されます。

# タイムサービスの停止とリセット
net stop w32time
w32tm /unregister
w32tm /register
net start w32time

# 強制同期とステータス確認
w32tm /resync /force
w32tm /query /status

Linux (Ubuntu/Debian)

最近のディストリビューションの多くは systemd-timesyncd を使用しています。これは timedatectl で管理できます。

# NTPが有効か確認
timedatectl status

# 無効な場合は同期を有効化
sudo timedatectl set-ntp true

# サービスを再起動して強制更新
sudo systemctl restart systemd-timesyncd

デュアルブート時の「時刻の跳び」を直す

LinuxとWindowsがBIOS時計の設定を奪い合わないように、Linux側にハードウェアクロックをUTCではなくローカル時刻として扱うよう指示します。

timedatectl set-local-rtc 1 --adjust-system-clock

WSL2の時刻遅延を解決する

WSL2は、ラップトップがスリープから復帰した後に時刻同期が失われることで有名です。WSL内で curlapt update がSSLエラーで失敗する場合は、Linuxターミナルで以下を実行してください。

# Linuxカーネルにハードウェアクロックから時刻を取得させる
sudo hwclock -s

それでも解決しない場合は、Windows PowerShellからWSLを完全に再起動するのが最終手段です:

wsl --shutdown

検証:本当に直ったか?

時計の表示を信じるだけでなく、ハンドシェイク(通信の確立)を検証しましょう。

  • 正確なずれを確認する: time.is にアクセスしてください。時計が0.1秒でもずれているかどうかが分かります。
  • ハンドシェイクのテストを強制実行する: ブラウザのキャッシュに左右されずに curl を使ってSSL検証が成功するか確認します。

curl -Iv https://www.google.com

    `SSL certificate verify ok` という行を探してください。
  - **HSTSキャッシュをクリアする:** サイトが依然としてエラーになる場合、Chromeが「悪い」状態を記憶している可能性があります。`chrome://net-internals/#hsts` にアクセスし、「Delete domain security policies」を見つけてドメイン名を入力してください。

## 最後に
時計が正確なのにエラーが消えない場合は、ネットワークを確認してください。空港などの公共Wi-Fiポータルでは、自己署名証明書でトラフィックを傍受することがあります。この場合、ログインポータルで認証を完了するまで `NET::ERR_CERT_DATE_INVALID` の警告が出続けることがあります。

Related Error Notes