非常にまれに起こる問題かなと思うけど、時間かかったので、メモする。
問題
WindowsのwslでのLinux環境で、会社のgitlabにアクセスしようとしたとき、下記のエラーが出た。
$ git pull origin main
fatal: unable to access 'http://gitlab.****/***.git/': SSL certificate problem: certificate is not yet valid
いつもの通りの操作だけど、今日突然エラーが出ている...
追記、
gitlabだけでなく、ほかのメンバーも似たようなエラーが出ており、下記の解決策で解決できた。
cause: Error: certificate is not yet valid
at TLSSocket.onConnectSecure (node:_tls_wrap:1545:34)
at TLSSocket.emit (node:events:513:28)
at TLSSocket.emit (node:domain:489:12)
at TLSSocket._finishInit (node:_tls_wrap:959:8)
at TLSWrap.ssl.onhandshakedone (node:_tls_wrap:743:12) {
code: 'CERT_NOT_YET_VALID'
}
解決策
いろいろ検索してたけど、解決できてなくて、最後にchatGBTに聞いたところ、解決した。
解決方法がすごいシンプルで、ちょっとわけわからないけど、念のため残しておく。
システム時間を正確な時間にすること
-
いまのシステム時間を確認する
WSLでの時間が昨日の日付になっていることがわかった。
$ date Wed May 17 12:10:09 JST 2023
-
システム時間を正確な時間に修正する
sudo timedatectl set-time 2023-05-18 sudo timedatectl set-time 14:17 $ date Thu May 18 14:17:01 JST 2023
そうしたら、エラーが消えた。
chatGBTの回答によると、システム時間がずれていて、証明書の有効期限外になったことが原因。
しかし、証明書の有効期限を確認したら、問題なさそう。
有効期限が May 8, 2023, at 18:01:02 GMT ~ August 6, 2023, at 18:01:01 GMT なので、
時間がずれていても、有効期限内になっているはず。
$ echo | openssl s_client -servername hostname -connect gitlab.lookingup.co.jp:443 2>/dev/null | openssl x509 -noout -dates
notBefore=May 8 18:01:02 2023 GMT
notAfter=Aug 6 18:01:01 2023 GMT
結論としては、システム時間を修正することで、問題解決したけど、原因はわかんない。謎。
追記
最近社内サービスサーバに接続する時も、似たようなcertificate is not yet validエラーが出ていて、
同じ解決方法でやってみたら、解決した。
今度は手動で時刻修正よりは、NTPサーバー設定をした。
参照:AlmaLinux8:NTPサーバー設定(Chrony)
その他の解決案
stackOverflow上では似たような質問が出ているけど、
Unable to access gitlab: SSL certificate has expired,
一番簡単な方法は、git のssl検証プロセスを禁止することだそう。
git config --global http.sslVerify "false"
すごい乱暴な解決方法だけど、すぐ効いた。
ただこれで一律に禁止するのはセキュリティ上で問題になるので、やめた方がよいだそう。
gitlabのhttps証明書を改めてダウンロードする方法も見かけたけど、うまくいってなくて、あきらめた。