2017-01-02 3 views
3

Мы использовали собственное собственное хранилище ключей, а также предоставили пользовательскую реализацию класса с использованием JSSEImplementation и ServerSocketFactory и настроены как в server.xml для атрибутов «store», так и «sslImplementation».с использованием пользовательского хранилища ключей и jsseimplementation при обновлении до tomcat 8.5

Но теперь обновление до 8.5, я начал получать много ClassNotFoundException для JSSESocketFactory и т.д.
Doing немного больше исследований я обнаружил, что они удалили много классов и методов как JSSESocketFactory.java, getServerSocketFactory(), getSSLUtil (AbstractEndpoint конечной точки) и т.д.

Итак, мой вопрос:
есть ли способ в Apache Tomcat 8.5, в котором я могу настроить мой пользовательское хранилище ключей в разделе «магазин» в server.xml и использовать свой собственный sslImplementation?
я использовал AbstractEndpoint в сигнатуре метода, чтобы получить название магазина, установленный в server.xml, а затем загружаются в хранилище ключей, что MyJSSESocketFactory так:

public class MySSLImplementation extends JSSEImplementation 
{ 
@Override 
    public org.apache.tomcat.util.net.ServerSocketFactory getServerSocketFactory(
      AbstractEndpoint endpoint) { 
     kStore = endpoint.getProperty("store"); 
     return new MyJSSESocketFactory(endpoint, kStore); 
    } 
} 

public class MyJSSESocketFactory extends JSSESocketFactory { 

    private final AbstractEndpoint _endpoint; 
    private final String store; 

    public MyJSSESocketFactory(AbstractEndpoint endpoint, String store) { 
     super(endpoint); 
     this._endpoint = endpoint; 
     this.store = store; 
    } 
    /* 
    * Gets the SSL server's keystore. 
    */ 
    @Override 
    protected KeyStore getKeystore(String type, String provider, String pass) 
      throws IOException { 

     if ("MYKS".equalsIgnoreCase(type)) { 

      String keystoreName = store; 
      KeyStore ks = null; 
      try { 
       if (provider == null || provider.isEmpty()) { 
        ks = KeyStore.getInstance(type); 
       } else { 
        ks = KeyStore.getInstance(type, provider); 
       } 

       MyStoreParameter params = new MyStoreParameter(
         keystoreName); 
       ks.load(params); 
      } catch (Exception ex) { 
       throw new IOException(
         "Failed to load keystore " + keystoreName, ex); 
      } 
      return ks; 
     } else { 
      return super.getKeystore(type, provider, pass); 
     } 
    } 
} 

«MYKS» установлен в server.xml для «магазина» атрибута

+0

Привет: Я считаю, что ответ «да», и решение, чтобы определить свои собственные настройки, используя JSSE (против , очевидно, теперь устаревшие API Tomcat). Я смог найти только одну статью о том, как вы могли бы это сделать: http://www.angelfire.com/or/abhilash/site/articles/jsse-km/customKeyManager.html – paulsm4

+0

Мне любопытно .. зачем вам нужна ваша 'SocketFactory'? –

ответ

4

для все, что стоит, это коммит, который сломал его:

Remove BIo specific JSSE code

Вот некоторые обоснования для его удаления:

https://github.com/spring-projects/spring-boot/issues/6164

@ Маркт-АЧС Там, как представляется, ряд обрушений изменений в 8.5.3 (облагораживания от 8.0.33):

  1. Maven артефакта org.apache.tomcat .embed: кот-не встраивать каротаж-Juli больше не существует
  2. Класс org.apache.tomcat.util.net.ServerSocketFactory больше не существует
  3. org.apache.tomcat.util.net.jsse.JS класса не SESocketFactory больше не существует
  4. Метод JSSEImplementaton.getServerSockerFactory (AbstractEndpoint) больше не существует
  5. Метод JSSEImplementaton.getSSLUtil (AbstractEndpoint) больше не существует
  6. Http11NioProtocol.getEndpoint() больше не видна
  7. поле org.apache. не tomcat.util.scan.Constants.MERGED_WEB_XML больше не существует
  8. AbstractHttp11Protocol.setCompressableMimeTypes больше не существует

Ответ:

-не требуется только включить ведение журнала контейнера через log4j 1.x и версия больше не поддерживаются log4j сообщество. log4j 2.x может использовать для регистрации контейнеров без дополнительных библиотек.

2-6 являются побочными эффектами рефакторинга соединителей в 8.5.x/9.0.x. Все они являются низкоуровневыми внутренними API-интерфейсами, которые я немного удивлен .

7 был частью механизма, используемого для передачи web.xml в Jasper для обработки . Он был удален, поскольку он больше не требовался от Servlet 3.0, поскольку вся необходимая информация была доступна через стандартный API сервлета.

8 Это была некоторая очистка API. Это можно было бы довольно легко восстановить для 8.5.x.

коммита, было сделано в ноябре 2014 г.

На сервере Tomcat 8.0, класс все еще был там - и НЕ на * устаревшие»список:

https://tomcat.apache.org/tomcat-8.0-doc/api/org/apache/tomcat/util/net/jsse/JSSESocketFactory.html

Вот журнал изменений, в котором обсуждалось «удаление BIO» («Блокирующий ввод-вывод»):

Migrating from Tomcat 8.0 to 8.5

Finallly, сравнивая эти две ссылки могут помочь:

SSL/TLS Configuration HOW-TO Tomcat 8.0.39

SSL/TLS Configuration HOW-TO Tomcat 8.5.9

 Смежные вопросы

  • Нет связанных вопросов^_^