Неподдерживаемое исключение из операции Jetty ManagedSelector

#android #ssl #jetty #embedded-jetty

Вопрос:

Я пытаюсь запустить сервер Jetty с помощью TLS-PSK. Тем не менее, я получаю следующий журнал msg:

 WARN org.eclipse.jetty.io.ManagedSelector - java.lang.UnsupportedOperationException
 

Отображение журналов причалов включено ниже:

  > Cipher Suite Selections
    > Enabled size=1
   |   > TLS_PSK_WITH_AES_256_CBC_SHA
    > Disabled size=24
 

Когда я запускаю свой сервер Jetty на Android, ниже приведен журнал дампа, связанный с Selector

  = SelectorManager@ServerConnector@fe6bfb2{SSL, (ssl, http/1.1)}{0.0.0.0:8443} - STARTED
|   = ManagedSelector@7ad0eac{STARTED} id=0 keys=0 selected=0 updates=0 - STARTED
|      = EatWhatYouKill@42fd775/SelectorProducer@582930a/PRODUCING/p=false/QueuedThreadPool[qtp207014042]@c56c89a{STARTED,8<=8<=10,i=6,r=-1,q=0}[ReservedThreadExecutor@9540b03{s=0/1,p=0}][pc=0,pic=0,pec=0,epc=0]@2021-09-08T01:32:00.463-04:00 - STARTED
|     |   - SelectorProducer@582930a
|     |   ~ QueuedThreadPool[qtp207014042]@c56c89a{STARTED,8<=8<=10,i=6,r=-1,q=0}[ReservedThreadExecutor@9540b03{s=0/1,p=0}] - STARTED
|      > updates @ 2021-09-08T01:32:00.453-04:00 size=0
|      > keys @ 2021-09-08T01:32:00.46-04:00 size=0
 

Ниже приведен список конфигурации API SslContextFactory, которую я вызывал до сих пор:

 QueuedThreadPool threadPool = new QueuedThreadPool();
threadPool.setMaxThreads(10);

Server jettyServer = new Server(threadPool);
jettyServer.addBean(new ScheduledExecutorScheduler());

SslContextFactory ctxFactory = new SslContextFactory.Server();
ctxFactory.setProvider(PROVIDER_NAME);
ctxFactory.setKeyStoreProvider(PROVIDER_NAME);
ctxFactory.setExcludeCipherSuites(new String[0]); //Empty
ctxFactory.setIncludeCipherSuites(suites); //"TLS_PSK_WITH_AES_256_CBC_SHA"
ctxFactory.setExcludeProtocols("TLS", "TLSv1", "TLSv1.1");
ctxFactory.setIncludeProtocols("TLSv1.2");
ctxFactory.setKeyStore(keystore);
ctxFactory.setSslContext(sslContext);
 

Есть ли какая-то конфигурация, которой мне не хватает в отношении селектора?

Комментарии:

1. Недостаточно предоставленной информации для работы. Что такое PROVIDER_NAME? С каким уровнем API Android вы работаете? Какова вся последовательность этого исключения?

Ответ №1:

Выбранный PROVIDER_NAME вами интерфейс Java SSLEngine API не реализован полностью или должным образом.

См.: https://github.com/eclipse/jetty.project/issues/4961