2013-11-25 35 views
6

In base a queste due risposte (1) (2) è possibile avere due certificati ssl che servono dallo stesso server tomc utilizzando Server Name Indication (SNI).Come configurare Tomcat con due certificati SSL usando SNI?

La mia domanda è quindi, come impostare questo? Potrei installare due host virtuali ma ho ancora un solo connettore che presenta il certificato ssl specificato per il client. Nel connettore è possibile specificare il keystore e l'alias da utilizzare per il certificato, ma non vi è alcun parametro che indichi per quale host virtuale è utilizzato questo connettore o quale certificato deve presentare al client in base al dominio utilizzato.

Come posso comunicare a Tomcat quale certificato ssl (o per essere più corretto quale archivio di chiavi) che deve utilizzare durante l'utilizzo di SNI?

(1) https://stackoverflow.com/a/10173447 (2) https://stackoverflow.com/a/6343059

risposta

14

È necessario rileggere le risposte a quelle domande. SNI non è supportato sul lato server fino a Java 8. La versione Java minima che Tomcat 8 deve supportare è Java 7, quindi al momento non ho supporto SNI in Tomcat.

Potrebbe essere possibile supportare facoltativamente SNI se Tomcat è in esecuzione su Java 8 o successivo, ma ciò richiederebbe modifiche di codice in Tomcat per cui attualmente non ci sono piani.

aggiornamento a partire da dicembre 2014:

L'aggiunta del supporto SNI è sulla lista TODO per Tomcat 9. Tale elenco TODO è piuttosto lungo e SNI non è attualmente in cima alla lista. Come sempre i patch sono i benvenuti.

Una volta implementato SNI in Tomcat 9, è possibile che il supporto SNI possa essere sottoposto a back-port su Tomcat 7 e Tomcat 8. Di nuovo, benvenuto con patch.

aggiornamento a partire da giugno 2015:

SNI è stato implementato per Tomcat 9. E 'supportato da tutte le implementazioni di connettore a tre HTTP (NIO, NIO2 e APR/native). Per utilizzare SNI con NIO o NIO2 è necessario compilare Tomcat 9 (un baule a.k.a.) dall'origine. Per utilizzare SNI con APR/nativo, è inoltre necessario compilare il trunk tc-native (non il ramo 1.1.x attualmente utilizzato dalle versioni di Tomcat).

La configurazione TLS è stata modificata in modo significativo per supportare SNI. Dettagli saranno nell'applicazione documenti web una volta che hai costruire Tomcat Aggiornamento 9.

a partire da novembre 2016:

supporto SNI è incluso nel Tomcat 8.5.x. È improbabile che verrà ulteriormente sostenuto. vale a dire che è improbabile farlo a 8.0.xo 7.0.x.

+0

Ci sono stati progressi in questo, o la vostra risposta è ancora valida fino ad oggi? – stepanian

+0

Risposta aggiornata. –

+0

Grazie per l'aggiornamento. Se Google continua a spingere SSL per tutto, questo diventerà più critico per quelli di noi che sono troppo poveri per creare una nuova istanza del server AWS per ogni sito che richiede SSL :) – stepanian

1

È possibile installare nginx/haproxy (entrambi supporta SNI) davanti al tomcat e fungeranno da proxy.

+0

Esiste in realtà un tutorial abbastanza buono su come farlo per haproxy all'indirizzo http://arstechnica.com/information-technology/2015/ 05/web-served-how-to-make-your-site-all-https-tutto-il-tempo-per-tutti/ – idarwin

3

si potrebbe configurare più certificati SSL utilizzando la configurazione di seguito:

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" 
       maxThreads="150" SSLEnabled="true" defaultSSLHostConfigName="domain1"> 
     <SSLHostConfig hostName="domain1" > 
      <Certificate certificateKeystoreFile="conf/domain1-keystore.jks" certificateKeystorePassword="dom1keystorepwd" 
         certificateKeyPassword="dom1keypwd" 
         type="RSA" /> 
     </SSLHostConfig> 
     <SSLHostConfig hostName="domain2" > 
      <Certificate certificateKeystoreFile="conf/domain2-keystore.jks" certificateKeystorePassword="dom2keystorepwd" 
         certificateKeyPassword="dom2keypwd" 
         type="RSA" /> 
     </SSLHostConfig> 
    </Connector> 

Tweak il protocollo in base alle proprie necessità. Puoi anche configurare usando openssl invece di jsse.Si prega di fare riferimento https://tomcat.apache.org/tomcat-8.5-doc/config/http.html#SSL_Support_-_SSLHostConfig per ulteriore assistenza

Inoltre, defaultSSLHostConfigName è molto importante altrimenti non funzionerebbe. Seleziona un dominio qualsiasi come predefinito.

+0

grazie per il suggerimento. non funziona senza defaultSSLHostConfigName – MitchBroadhead