[英]configure embedded Tomcat7 to use keystorefile embedded in executable jar
我已經設法配置我的嵌入式tomcat使用密鑰庫文件,當我從eclipse執行項目時它可以工作。
代碼很簡單:
...
String keystore = new File(MyServer.class.getResource("/keystore").toURI()).toPath().toString();
httpsConnector.setAttribute("keystoreFile",keystore);
...
文件keystore
位於添加到構建路徑的源目錄中。
將項目導出到可執行jar后,我可以驗證jar根目錄中是否存在keyfile
。
但在執行jar時,我收到此錯誤:
Exception in thread "main" java.lang.IllegalArgumentException: URI is not hierarchical
所以我認為,我無法使用httpsConnector.setAttribute("keystoreFile",...)
配置密鑰httpsConnector.setAttribute("keystoreFile",...)
。 還有另一種配置方式嗎? 我真的不想在臨時目錄中復制密鑰文件並從那里引用它。
我真的不想在臨時目錄中復制密鑰文件並從那里引用它。
我很同情,但看起來你將不得不這樣做。 可以從任何類型的輸入流加載Java密鑰庫(請參閱Keystore.load ),因此您可以認為可以從jar文件中的資源加載密鑰庫。 但是,如果在Tomcat 7源代碼中搜索字符串“ks.load”,您將看到它始終將keystoreFile屬性解釋為File
的名稱,並創建一個FileInputStream,然后傳遞給ks.load。
因此,有必要創建包含密鑰庫的臨時文件,並將此文件的位置作為keystoreFile
屬性傳遞。
順便說一句 - 如果你不打算分發這個jar並且願意將它保密,那么你嵌入密鑰庫的方法可能就行了。
但是,如果您計划將此jar分發到多個站點,則每個站點的安全性都基於相同的私鑰。 此外,任何有權訪問jar文件的人都可以提取私鑰,然后可以竊聽或者中間人攻擊您的所有站點。
通常,最好是安裝過程需要由站點管理員生成新的私鑰和證書(即使它只是一個自簽名證書)。 這樣每個密鑰都是不同的,破壞網站的唯一方法是訪問該服務器密鑰庫和密碼。
這可能是一個舊帖子,但我遇到了同樣的問題,並沒有在網上找到解決方案。 所以我想分享我的所作所為。
就我而言,我需要兩個帶有自簽名證書的端口。 除了在application.yml中配置的那個,另一個端口在主條目中配置。
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public ServletWebServerFactory servletContainer() throws IOException
{
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(additionalConnector());
return tomcat;
}
private Connector additionalConnector() throws IOException
{
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("https");
connector.setPort(8088);
...
URL keystore = new ClassPathResource("keystore.jks").getURL();
connector.setAttribute("keystoreFile", keystore.toExternalForm());
return connector;
}
}
使用URL,mvn spring-boot:運行並運行jar工作,可以正常加載密鑰庫。
我使用的是spring-boot 2.0.1.RELEASE和tomcat 8.5.29
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.