2011-12-04 34 views
9

私は、毎日、上記のファイルを更新するXMLファイルを解析することを検討しています。彼らは独自の証明書(https://..。)を使用しており、その特定のURLを使用することはできず、http:// ...リンクも利用できません。私のテストを実行している間javax.net.ssl.SSLException:java.security.InvalidAlgorithmParameterException:trustAnchorsパラメータが空でなければならない

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

このコードは、次の例外がスローされます。

javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

私はこの種類の接続に対処するためのさまざまなクラスを作成したり、個人のサーバーを扱う提案の多様性を見てきましたキーストアに証明書を追加し、そのキーストアをJavaプロジェクトに追加することはできませんでしたが、私はそれを行うことができず、XMLにオンラインでアクセスするためのやや簡単な方法を探しています。

+0

デフォルトのものを使用することなく、あなたのトラストストアの設定を変更しているように見えます。あなたは何を変えましたか? – Bruno

+1

これは、デフォルトのトラストストアを削除するという効果があったため、空のtrustAnchorsパラメータが得られました。常に空ではないトラストストアが存在する必要があります。 – Bruno

+0

これを見てください[回答] [1] 要するに、キーストアが見つかりません。 [1]:http://stackoverflow.com/a/6788682/207131 – FabienB

答えて

3

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

XML BTWとは何も関係ありません。

+0

トラストストアを追加および管理するにはどうすればよいですか? – Acetaminophen

+0

@Aetetaminophen Javadoc:Security/JSSEリファレンスガイドを参照してください。 – EJP

+0

私はキーストアに持っている証明書を追加しようとすると、/lib/security/cacertsの名前を/lib/security/cacerts_origに変更しました。これを修正して次のエラーが表示されます:javax.net.ssl .SSLHandshakeException:sun.security.validator.ValidatorException:PKIXパスの構築に失敗しました:sun.security.provider.certpathSunCertPathBuilderException:要求されたターゲットへの有効な証明書パスが見つかりません – Acetaminophen

9

SSL証明書を格納するには、トラストストアが必要です。ご希望のウェブブラウザを使用して証明書をダウンロードすることができます。証明書をトラストストアにロードするには、JDKに付属の「keytool」プログラムが必要です。

例えば

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

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

、あなたがしなければなりません接続

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()); 
-3

を開いて、システムのプロパティ「は、javax.net.ssl.trustStore」と「javax.net.ssl.trustStorePassword」を定義し、前をキーストアがあるプログラムと、それを開くためのパスワードを教えて私は同じ例外に遭遇した私のMAC OSX(ヨセミテ)向けに、Java 6アプリケーションを開発しています。あなたはOSX 2014年のAppleのJavaをダウンロードしてインストールする必要があります。

http://support.apple.com/kb/DL1572

0

あなたはこれを試すことができます:

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. 
関連する問題