Javaを使用してHTTPSに要求すると、信頼できる証明書が見つかりません。

Javaを使用してHTTPSに要求すると、信頼できる証明書が見つかりません。

私はJava開発者であり、特定のバージョンのJava 8(1.8.0_162)を使用する必要がありますが、OpenJDKは使用できません。

しかし、私のJavaプログラムから接続/インポート/ダウンロード/何かを試みると、このエラーが発生します。HTTPS URL

sun.security.validator.ValidatorException: 信頼できる証明書が見つかりません。

コードは本番環境で実行されているため正確であることはわかっていますが、ローカルコンピュータでコードを実行できます。

証明書と関係があるようですが、修正方法がわかりません。

答え1

JDKとJREには、信頼できる独自の証明書セットが付属しています。ファイル名は "cacerts"で、見つかりますJDK_HOME/jre/lib/securityreadlink -f /bin/javaJDK_HOME ディレクトリが存在する場所を示す必要があります。

cacertsファイルには、信頼できる認証局(CA)のすべての証明書のリストが含まれています。ファイルはJKS形式なので、keytoolJDKの一部である他のコマンドを使用して操作できます。このファイルを変更するには、root 権限が必要です。

ほとんどのよく知られたCAはすでにcacertsファイルの一部です。例外が発生するため、HTTPSエンドポイントで使用されているCA証明書はファイルから欠落している必要があります。リモートエンドポイントからCA証明書を抽出してcacertsファイルに追加する必要があります。後でアプリケーションを再起動すると、期待どおりに機能します。

cacerts ファイルを変更したくない場合は、独自のトラストストアを設定することもできます。この方法では、信頼する証明書を含むトラストストアを作成し、プロパティを使用してjavax.net.ssl.trustStoreアプリケーションがjavax.net.ssl.trustStorePasswordそれを指すようにします。

答え2

問題は、私のセキュリティフォルダ()jre/lib/security内のファイルに存在しない他のファイルへのリンクが壊れていることです。

Oracleホームページに移動し、Java 8 LinuxからJDKをダウンロードし、セキュリティフォルダ内のすべてのファイルを置き換えました(フォルダポリシーはありません)。

関連情報