1

私の Java プログラムは、GitHub の raw アドレスを使用してバージョン ファイルにアクセスし、最新バージョンを取得します。このアドレスの形式はhttps://raw.github.com/user/repository/branch/version_fileです

テスト段階では、次のコードでこれを使用しても問題はありませんでした。

currentVersion = new Version(plugin.getDescription().getVersion());

URL url = new URL("https://raw.github.com/zonedabone/CommandSigns/master/VERSION");
URLConnection connection = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
newestVersion = new Version(in.readLine());

if (currentVersion.compareTo(newestVersion) < 0)
    newAvailable = true;

ただし、一部のユーザーから次のエラーが報告されています。

sun.security.validator.ValidatorException:
  PKIX path building failed:
    sun.security.provider.certpath.SunCertPathBuilderException:
      unable to find valid certification path to requested target

Java は、SSL 証明書を検証できないと不平を言っています。GitHub の証明書は DigiCert によって検証されていますが、一部の Java ビルドではこれを識別できないようです。

これを克服するには、証明書をトラストストアに追加し、検証を完全に無効にするという 2 つの方法があることを読みました。

StackOverflow で提案された回答は、allow-all TrustStore を使用します。これは、「テスト環境」の範囲内にないことを考えると非常に悪い考えです。または、証明書を追加する方法を示している場合は、通常、壊れたウェブページ。

誰か新しい情報を提供できますか?

4

2 に答える 2

4

まず理論... JSSEリファレンスガイドが言うように:

重要な注意: JDK は、/lib/security/cacerts ファイル内に限られた数の信頼できるルート証明書と共に出荷されます。keytool に記載されているように、このファイルをトラストストアとして使用する場合、このファイルに含まれる証明書を維持 (つまり、追加/削除) するのはユーザーの責任です。

接続するサーバーの証明書構成によっては、追加のルート証明書を追加する必要がある場合があります。適切なベンダーから必要な特定のルート証明書を取得します。

ユーザーは、CA 証明書のリストを自分で管理する必要があります。残念ながら、多くの人はそれを行う方法を知りません。別の JRE のcacertsファイル (より新しいもの) を自分のインストールに使用できます。

任意の証明書を信頼し、その接続専用に使用するトラスト マネージャーを使用することもできますが、潜在的な MITM 攻撃への接続を開くため、これはお勧めできません。この安全でないソリューションのコード例は十分にあります。

特定の証明書を信頼する場合の最善の解決策は、この回答で説明されているように、特定のトラストストアを使用して正しくロードすることです。InputStreamアプリケーションにバンドルする場合は、このトラスト ストアをクラスローダーからロードすることもできます。

または、可能であれば、OS トラスト ストアを直接使用することもできます。Windows では、この記事Windows-ROOTの説明に従ってキーストアをロードできます。OSX では、.KeychainStore

于 2012-09-13T17:27:47.887 に答える
-2

"all"-TrustManager を使用して HttpsUrlConnection を実装できます

http://bitsandcodes.blogspot.de/2010/08/create-trust-manager-that-trust-all-ssl.htmlのように

于 2012-09-13T15:48:25.363 に答える