2015-04-19 51 views
1

我想在java中開發一個基本上從REST-JSONs API中獲取大量數據並在數據庫中插入的應用程序。我的問題是我正在使用的兩個URL引發了有關SSL證書的錯誤。爲了解決這個問題,我創建了一個jks文件並插入了他們的證書。問題是,一旦我把它放在我的代碼上,jvm只使用該文件上的證書,其他所有的證書都被拒絕。所以我想讓我的應用程序接受來自「cacerts.jks」和「custom.jks」的jsons。請不要告訴我將證書添加到「teste.jks」(本機來自jvm),因爲該應用程序不會在我的計算機上運行,​​我需要在已分區文件上的證書。JAVA使用兩個keystore相同的應用程序

一個多觀察,我與90不同的URL工作,我用下面的線來表示JVM,其密鑰庫使用:

System.setProperty("javax.net.ssl.trustStore",System.getProperty("user.dir")+"/libs/teste.jks"); 
    //or (for native one): 
System.setProperty("javax.net.ssl.trustStore", "cacerts.jks"); 

回答

0

實施javax.net.ssl中的一個子類.TrustManager或其中的一個子類,如javax.net.ssl.X509TrustManager(下例中的MyTrustManager),並調整SSLContext以使用它。您的信任管理器實施可以在驗證/信任證書方面做您想做的任何事情。

 SSLContext context = SSLContext.getInstance("TLS"); 
     MyTrustManager tm = new MyTrustManager(); 
     SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "SUN"); 
     context.init(null, new TrustManager[] { tm }, sr); 
     SSLContext.setDefault(context); 
     HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory()); 
0

創建 TrustManagers,一個使用使用自己默認的信任,一個,以及帶初始化的SSLContext:

sslContext.init(null, new TrustManager[]{tm1, tm2}, null); 

見JSSE參考指南瞭解更多詳情。

+0

你能幫我創建這些TrustManagers嗎?一個是默認的,另一個來自jks文件... – Ernanirst

相關問題