突然のトラブル:すべてが動かなくなったとき
ローカルプロジェクトの開発に没頭していたとき、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内で curl や apt 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` の警告が出続けることがあります。

