2014-06-05 26 views
1

我在我的文件系統下有一個自定義的JKS文件(密鑰庫),在/opt/myapp/keystore/myapp.jks下,並且我正在部署一個需要使用它的Tomcat7的myapp.war如何指定Tomcat7 WAR的密鑰庫位置?

如果這是一個可執行的JAR文件(而不是WAR),我可能會做這樣的事情:

java -jar myapp.jar -Djavax.net.ssl.keyStore=/opt/myapp/keystore/myapp.jks 
    -Djavax.net.ssl/keyStorePassword=mypasswd 

如何/我在哪裏完成同樣的Tomcat7?

+0

您可以編輯您的問題以說明(a)您希望WAR文件中的代碼使用這些設置還是(b)您希望Tomcat連接器使用這些設置來提供HTTPS請求?這些將是完全不同的答案。 – Bruno

回答

1

您可以到conf/server.xml文件添加SSL連接器如下面的例子:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
       maxThreads="150" scheme="https" secure="true" 
       keyAlias="your-cert-key" keystoreFile="your-keystore-path.keystore" 
       keystorePass="yourpassword" 
       clientAuth="false" sslProtocol="TLS" /> 
+1

在這裏,WAR文件中的應用程序可能使用密鑰庫作爲客戶端證書,或者至少不用於配置服務器證書。在這裏,您在服務器配置中配置的內容與WAR文件無關。 – Bruno

+0

@Bruno'需要使用它的Tomcat7' =>所以,也許我不明白這個問題,但我明白他希望使用這個密鑰庫的tomcat7。告訴我,如果我錯了。 – lpratlong

+0

我的理解問題是「WAR文件中的webapp需要使用它」(「* myapp.war to Tomcat7需要使用它*」),而不是Tomcat需要使用它... – Bruno

2

有多種選擇。

  • 如果你很高興有這些設置是由你的JVM全局訪問,包括所有的Tomcat容器中運行的戰爭(但可能不包括服務器連接器本身,因爲它可以單獨配置) ,請在catalina啓動腳本(.sh.bat,具體取決於平臺)中將這些選項添加到JAVA_OPTS中。這並不理想,因爲在該JVM中運行的任何代碼都可以訪問該密鑰庫,因此您需要確保它是可接受的。

  • 如果你可以改變的代碼,你可以初始化爲無論是用它單獨SSLContext S(你可以從它那裏得到了SSLEngineSSLSocketFactory,使用它可以建立SSLSocket S或初始化一個HttpsUrlConnection)。沿着這些線路的東西應該工作:

    // Load the key store: change store type if needed 
    KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 
    FileInputStream fis = new FileInputStream("/path/to/keystore"); 
    try { 
        ks.load(fis, keystorePassword); 
    } finally { 
        if (fis != null) { fis.close(); } 
    } 
    
    SSLContext sslContext = SSLContext.getInstance("TLS"); 
    // the second "null" argument will let you use the default trust manager settings. 
    sslContext.init(kmf.getKeyManagers(), null, null); 
    
    SSLSocketFactory sslSocketFactory = sslContext.getSSLSocketFactory(); 
    

    你可以你的web應用,而不是一個FileInputStream內加載從資源密鑰庫,或者通過JNDI,這取決於你想如何配置你的總體格局。

+0

Thanks @Bruno(+1) - 我很欣賞這個答案,我應該澄清一點,我只是將一個WAR部署到Tomcat實例,因此足以定義Tomcat範圍(而不是應用程序特定的)SSL設置。不過謝謝你! – IAmYourFaja

+0

當然,但您目前接受的其他答案中的設置只會影響Tomcat連接器,而不會影響其中運行的WAR應用程序。如果您希望在WAR中運行的應用程序使用這些設置,則需要我剛纔提到的兩個選項之一(如果您只有一個應用程序,可能是第一個選項)。 – Bruno