2

ファイル システムにカスタム JKS ファイル (キーストア) があり、それを使用する必要がある Tomcat7/opt/myapp/keystore/myapp.jksにデプロイしています。myapp.war

これが (WAR ではなく) 実行可能な JAR である場合は、次のようにします。

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

Tomcat7で同じことをどのように/どこで達成しますか?

4

2 に答える 2

2

複数のオプションがあります。

  • Tomcat コンテナー内で実行されるすべての WAR を含め、これらの設定を JVM からグローバルにアクセスできるようにしたい場合 (ただし、個別に構成できるため、サーバー コネクタ自体を除外する可能性があります)、それらのオプションJAVA_OPTScatalinaスクリプトを起動します (.shまたは.bat、プラットフォームによって異なります)。これは理想的ではありません。その JVM 内で実行されているすべてのコードが実質的にそのキーストアにアクセスできるため、それが受け入れられることを確認する必要があります。

  • コードを変更できる場合は、SSLContextそれを使用しているものに対して個別の を初期化できます (それからSSLEngineまたはを取得SSLSocketFactoryして、 を構築しSSLSocketたり、 を初期化したりできます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();
    

    FileInputStream全体的なセットアップの構成方法に応じて、の代わりに webapp 内のリソースから、またはおそらく JNDI を介してキーストアをロードできます。

于 2014-06-05T16:12:44.080 に答える
2

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" />
于 2014-06-05T15:44:58.700 に答える