最近ETCプロジェクトで作業しているときに、ETCインターフェースを呼び出すときにjavax.net.ssl.SSLHandshakeExceptionが発生しました。
完全な例外情報:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
上記の例外情報により、次のプロンプトが表示されます。要求ターゲットが有効な証明書パスを見つけられませんでした。HTTPSセキュアネットワーク通信プロトコルを使用してETCインターフェースにアクセスします。この問題の原因は、アプリケーションが配置されているJVM環境が正しい証明書ファイルを見つけられないことです。
実際、ソリューションは非常に単純です。つまり、インターフェースアドレスの証明書をダウンロードして、JVMが配置されている環境にインストールします。具体的な手順は次のとおりです。
-
手順1:アプリケーションがブラウザで呼び出す必要のあるインターフェイスのアドレスを入力し、F12キーを押して、[セキュリティ]列の[証明書の表示]ボタンをクリックします。証明書
の名前を覚えておいてください。
-
ステップ2:「実行」
certmgr.msc
と入力し、証明書管理ウィンドウを開いて、ダウンロードする必要のある証明書ファイルを見つけます。
-
手順3:ダウンロードする必要のある証明書ファイルを選択し、マウスを右クリック-> [すべてのタスク]-> [エクスポート]をクリックして、証明書をローカルディスクにエクスポートします。
-
手順4:コマンドウィンドウを開き、コマンドを実行し
keytool
て証明書をローカル環境にインストールします。
参数说明:
-import 导入证书操作
-alias 秘钥对的别名
-keystore 秘钥对的路径及名称
-file 证书文件的路径
-trustcacerts 告诉keytool您要将其导入作为受信任的证书
例えば:
keytool -import -alias cacerts -keystore cacerts -file D:\JavaEE\JDK\jdk1.8.2\jre\lib\security\zsetc.crt -trustcacerts
キーストアのパスワードを入力し、Enterキーを押します。
インストールされている証明書を表示する場合は、次のコマンドを実行できます。
keytool -list -v -alias cacerts -keystore cacerts -storepass 秘钥库的口令
証明書の削除:
keytool -delete -alias cacerts -keystore cacerts -storepass 秘钥库的口令
上記の方法に加えて、3つの新しいルート証明書がJDK 8u101バージョンに追加されました(https://bugs.openjdk.java.net/browse/JDK-8154757)。
したがって、上記の問題はJDKをアップグレードすることでも解決できます。