プロローグ
デバッグをしていると PKIX path building failed ~
あり~?
昨日まで普通に動いていたのに。
しかし、これは前にも起きたことがあるのでサクっと解決できる。
いま思えば、これが不幸の始まりでした。(所要時間12時間)
1.証明書エラーの解決(プロキシなし)
AWS環境では、EC2 with 似非SSLからインターネットに接続しようとして、 PKIX path building failed ~ が発生していたので、javaに似非SSL証明書を登録して解決。
PKIX path building failed:javaにSSL証明書を追加する
2.証明書エラーの解決(プロキシあり)⇒ 失敗!
ローカルPCから繋がらなくなり、PKIX path building failed ~ が出ていたので、何の疑いもなく似非SSL証明書を登録した。
これが不幸の始まり。
2.1 証明書を登録、登録&登録
eclipseを使ってウン10年、jdk、jre 以外にeclipseのjreがあるとは知りませんでした。
Eclipseでgradleプロジェクト作成時、証明書エラーで失敗した場合
jdkのcacerts に証明書を登録してもダメ、jreのcacerts に証明書を登録してもダメ。
これを見つけたときは、tomcatでデバッグしていることもあり、手ごたえありでしたが、ダメ。
2.2 証明書をexp&imp
コンパネの証明書の管理から、臭そうな証明書をexp&imp、exp&imp、、、泥沼
※このときjavaのcacertsが復旧不能な状態になったと思います。
3.不変的なエラーの解決方法
いくつかありますが、ここでは確実に解決する方法を取り上げます。
3.1 事象が再現する最小構成を構築する
今回の件なら、以下の2点を確認できれば泥沼にハマることはなかったでしょう。
-
インターネットに繋がらないのは特定のサイトか?
-
java以外で繋がるか?
・インターネットに繋がらないのは特定のサイトか?
最初のアクセスがgoogle apiのため、またセキュリティが強化されたと思い込んだのが間違いでした。yahooでも繋がりませんでした。
spring bootでしたが、URLConnectionで繋ぐところだけ抜き出して素のjavaで確認しました。
・java以外で繋がるか?
最初のアクセスがGETなので、ブラウザでアクセスしたら繋がりました。いちおうnodeでも繋がることを確認しました。
だいたいプロキシを通してるんだから、「似非SSL証明書」をjavaに登録する事自体が奇妙だったんだ
4.証明書エラーの解決(プロキシあり)⇒ 解決
隣人のjdkのcacertsをもらって上書きしたら直りました(^^;
cacertsに登録されているリストも見ましたが、長いし、どれを直したらいいか分からないし、、、
3.1 事象が再現する最小構成を構築する で、jdkのcacertsがおかしいことは確信したので、迷わず上書きしました。
エピローグ
原因が分からないまま解決を優先してしまいました。
javaのcaについては分からないままです。
心残りはありますが、ここは
javaめんどくせー
proxyうざー
で締めたいと思います。
(ちなみに、本来の改修は30分で終わりました)
「似非SSL」口に出すと言いづらいですね。エセエスエスエル
もうセッセッセでいいんじゃないでしょうか、ワッショイ!