2017-01-24 84 views
1

在我的Spring啓動應用程序中,我需要在另一臺服務器上調用API(GET: https://anotherserver.com/api)。服務器管理員給了我一個名爲cacerts(無擴展名)的文件,並告訴我每次啓動我的Spring啓動應用程序時都使用VM選項導入文件。以編程方式將cacerts文件添加到信任庫

-Djavax.net.ssl.trustStore=C:\Users\k26342\Downloads\cacerts -Djavax.net.ssl.trustStorePassword=changeit 

它確實有效。現在我想編寫一些代碼來代替VM選項,但我不知道如何。我發現一些帖子(如thisthis),但帖子大約爲keystoreX509Certificate,我認爲這與我的情況不同。

任何幫助表示讚賞。

+0

這是設置信任庫的正確選項。你也可以使用'System.setProperty(「javax.net.ssl.trustStore」,path_to_your_cacerts_file)來設置它;'或者爲一個特定的連接配置一個信任庫,以便以非常的方式加載密鑰庫。請參閱http://stackoverflow.com/a/859271/6371459 – pedrofb

+0

@pedrofb謝謝。您的解決方案正確。我只需要添加兩行代碼:'System.setProperty(「javax.net.ssl.trustStore」,trustStorePath); System.setProperty(「javax.net.ssl.trustStorePassword」,trustStorePassword)'。如果您有時間,請發表回覆,我會接受。 :) – NMSL

回答

1

使用自定義信任庫是設置SSL連接中接受的可信證書的正確選項。您也可以使用System.setProperty()代替-D

System.setProperty("javax.net.ssl.trustStore", trustStorePath); 
System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword) 

另外,您可以dinamically配置特定連接加載密鑰庫信任設置默認trustore。請參閱https://stackoverflow.com/a/859271/6371459

0

雖然你應該小心與JRE安裝擺弄,你可以編程安裝在JRE安裝新的cacerts文件的東西,如:

File from = new File("C:\\Users\\k26342\\Downloads\\cacerts"); 
File to = new File(System.getProperty("java.home") + File.separator + "lib" + File.separator + "security" + File.separator + "cacerts"); 
Files.copy(from, to); 

注1:建議備份原來的cacerts首先文件。

注2:如果您沒有以管理員身份運行代碼,則可能存在安全限制,無法從上方阻止您。

+0

我不同意這個選項。除了您提到的問題之外,您可能還會影響其他應用程序並導致安全問題**。你也不知道'java.home'是否指向tomcat的JDK。在下次啓動後會發生變化 – pedrofb

+0

@pedrofb同意這不是最佳做法,但OP不想使用'-D'參數或其中一個鏈接解決方案。 – holmis83

+0

我沒有看到_它確實工作。無論如何,OP沒有指向正確的方向。 – pedrofb

相關問題