web-dev-qa-db-ja.com

javax.net.ssl.SSLException:Java.security.InvalidAlgorithmParameterException:trustAnchorsパラメータは空でない必要があります

私はXMLファイルを解析して上記のファイルを毎日更新することを検討しています-私が遭遇した唯一の問題は、彼らが独自の証明書( https:// .. 。)を使用することです。その特定のURLを使用しないでください。また、http:// ...リンクも利用できません。

URL url = new URL("https://...");
...
Document document = db.parse(url.openStream());

このコードは、テストの実行中に次の例外をスローします。

javax.net.ssl.SSLException:Java.lang.RuntimeException:予期しないエラー:Java.security.InvalidAlgorithmParameterException:trustAnchorsパラメーターは空でない必要があります

この種類の接続またはパーソナルサーバーを処理するためのさまざまなクラスの作成、および証明書をキーストアに追加してから、そのキーストアをJavaプロジェクトに追加することに関するさまざまな提案を見てきましたが、私はそれを行うことができず、XMLにオンラインでアクセスするための少し簡単な方法を探しています。

11
Acetaminophen

SSL証明書を保管するには、トラストストアが必要です。好みのWebブラウザーを使用して証明書をダウンロードできます。証明書をトラストストアにロードするには、JDKに付属の「keytool」プログラムが必要です。

たとえば、証明書ファイルの名前が「certificate.crt」であり、「secure.ts」という名前のトラストストアを作成する場合は、次のようにkeytoolを呼び出すことができます。

keytool -importcert -keystore secure.ts -storepass S3cuR3pas$! -file certificate.crt

次に、プログラムにキーストアの場所とそれを開くためのパスワードを伝え、システムプロパティ「javax.net.ssl.trustStore」と「javax.net.ssl.trustStorePassword」を定義する必要がありますbefore opening接続

URL url = new URL("https://...");

System.setProperty("javax.net.ssl.trustStore", "secure.ts");
System.setProperty("javax.net.ssl.trustStorePassword", "S3cuR3pas$!");
...
Document document = db.parse(url.openStream());
10
Errepunto

この奇妙なメッセージは、トラストストアが見つからなかったことを意味します。

XML BTWで行うことは何もありません。

3
user207421

これで試すことができます:

String javaHomePath = System.getProperty("Java.home");
String keystore = javaHomePath + "/lib/security/cacerts";
String storepass= "changeit";
String storetype= "JKS";

String[][] props = {
    { "javax.net.ssl.trustStore", keystore, },
    { "javax.net.ssl.keyStore", keystore, },
    { "javax.net.ssl.keyStorePassword", storepass, },
    { "javax.net.ssl.keyStoreType", storetype, },
};
for (int i = 0; i < props.length; i++) {
    System.getProperties().setProperty(props[i][0], props[i][1]);
}
// Now you can proceed to connect to call the webservice.
// SSL will be used automatically if the service endpoint url 
// starts with <a href="https://." target="_blank"         rel="nofollow">https://.</a>
// The server will send its certificate signed by verisign and 
// client will trust and authenticate the server as it recognizes 
// verisign as one trusted root.
1
atiruz