2013-11-25 42 views
6

Zgodnie z tymi dwiema odpowiedziami (1) (2) możliwe jest posiadanie dwóch certyfikatów ssl serwowanych z tego samego serwera tomcatserver za pomocą wskazania nazwy serwera (SNI).Jak skonfigurować Tomcat obsługującego dwa certyfikaty SSL za pomocą SNI?

Moje pytanie brzmi: jak to skonfigurować? Mogę skonfigurować dwa wirtualne hosty, ale wciąż mam tylko jedno złącze, które przedstawia klientowi określony certyfikat ssl. W łączniku można określić magazyn kluczy i alias do wykorzystania dla certyfikatu, ale nie ma parametru określającego, dla którego hosta wirtualnego jest to złącze lub który certyfikat powinien przedstawić klientowi zgodnie z używaną domeną.

Jak mogę powiedzieć tomcat, który certyfikat SSL (lub czy jest bardziej poprawny który magazyn kluczy) musi używać podczas korzystania z SNI?

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

Odpowiedz

14

Trzeba ponownie przeczytać odpowiedzi na te pytania. SNI nie jest obsługiwany po stronie serwera, dopóki Java 8. Minimalna wersja Java, którą Tomcat 8 musi obsługiwać, to Java 7, więc w tej chwili nie mam wsparcia dla SNI w Tomcacie.

Możliwe jest opcjonalne wsparcie dla SNI, jeśli Tomcat działa na Javy 8 lub późniejszej, ale wymagałoby to zmian kodu w Tomcat, dla których nie ma obecnie żadnych planów.

Aktualizacja z grudnia 2014:

dodanie wsparcia SNI jest na liście TODO dla Tomcat 9. To lista TODO jest dość długa i SNI nie jest obecnie na szczycie listy. Jak zawsze łatki są mile widziane.

Po wdrożeniu SNI w Tomcat 9 możliwe jest, że wsparcie dla SNI może zostać przekazane do Tomcat 7 i Tomcat 8. Znów, poprawione powitanie.

Aktualizacja z czerwca 2015:

SNI został wdrożony na Tomcat 9. Jest on obsługiwany przez wszystkie trzy złącza implementacji protokołu HTTP (NIO, NIO2 i APR/native). Aby użyć SNI z NIO lub NIO2, musisz skompilować Tomcat 9 (a.k.a. trunk) ze źródła. Aby używać SNI z APR/natywnym, będziesz musiał także skompilować tc-native trunk (, a nie gałąź 1.1.x, z której obecnie korzysta Tomcat, publikuje).

Konfiguracja TLS znacznie się zmieniła, aby obsługiwać SNI. Szczegóły będą w aplikacji Docs internetowej kiedyś trzeba zbudować Tomcat 9.

Aktualizacja z listopada 2016:

wsparcie SNI jest wliczone w Tomcat 8.5.x. Jest mało prawdopodobne, że zostanie on ponownie przeniesiony. tj. jest mało prawdopodobne, aby osiągnął 8.0.x lub 7.0.x.

+0

Czy nastąpił jakiś postęp w tej sprawie, czy odpowiedź na to pytanie jest nadal aktualna? – stepanian

+0

Odpowiedź zaktualizowana. –

+0

Dzięki za aktualizację. Jeśli Google nadal będzie naciskać SSL na wszystko, stanie się to bardziej krytyczne dla tych z nas, którzy są zbyt biedni, aby stworzyć nową instancję serwera AWS dla każdej witryny wymagającej protokołu SSL :) – stepanian

1

Można zainstalować nginx/haproxy (oba obsługuje SNI) przed tomcat i będą działać jako proxy.

+0

Istnieje rzeczywiście dobry samouczek dotyczący haproxy na stronie http://arstechnica.com/information-technology/2015/ 05/web-served-how-to-your-site-all-https-all-time-for-all/ – idarwin

3

Mogłeś konfiguracji wiele certyfikatów SSL przy użyciu poniższego konfiguracji:

<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 protokół w zależności od konieczności. Można również skonfigurować przy użyciu openssl zamiast jsse.Aby uzyskać dodatkową pomoc, należy zapoznać się z https://tomcat.apache.org/tomcat-8.5-doc/config/http.html#SSL_Support_-_SSLHostConfig

Również, defaultSSLHostConfigName jest bardzo ważne, inaczej nie działałoby. Wybierz dowolną domenę jako domyślną.

+0

dzięki za podpowiedź. nie działa bez defaultSSLHostConfigName – MitchBroadhead

Powiązane problemy