Включить наблюдаемость (ведение журнала / метрики) рукопожатий TLS в Embedded Tomcat 8.5 с Java 8 - PullRequest
0 голосов
/ 12 сентября 2018

Мы запускаем Spring Boot API, где мы завершаем TLS в самом API.Несколько раз мы наблюдали чрезмерную загрузку ЦП, которая после интенсивных поисков была вызвана тем, что кто-то создал много соединений (законно или ошибочно из-за отклоненных клиентских сертификатов) или не использовал возобновление TLS.

Для предотвращения этого долго и дорогопоиск в будущем, мы хотели бы иметь возможность регистрировать, когда рукопожатие не удается или успешно, и почему и используется ли возобновление сеанса.

Мы специально не привязаны к нашему текущему стеку и обновляемся до другого сервера, например,Undertow или WebFlux, и / или новая версия Java тоже подойдут.Точно так же мы можем использовать APR, NIO или собственные привязки, если это помогает в достижении этих целей.

Следующие другие вопросы предполагают, что в настоящее время не существует готового решения, и предлагают расширить JSSEImplementation или создайте настроенную фабрику сокетов SSL или переключите уровень адаптера NIO в режим отладки.Эти решения кажутся хрупкими, и мне интересно, есть ли более расширяемый механизм, основанный, например, на событиях или обратных вызовах.В качестве альтернативы мы могли бы включить журналы рукопожатия из Java, но они многословны, и при этом мы получили бы значительный удар по производительности.

Update1: I 'мы попытались использовать настроенный SSLServerSocketFactory.sun.security.ssl.SSLServerSocketFactoryImpl возвращает sun.security.ssl.SSLServerSocketImpl при связывании, которое возвращает хорошее SSLSocket при принятии.Я мог бы обернуть этот метод accept, чтобы всегда добавлять обработчик завершения.Единственный недостаток: SSLServerSocketFactoryImpl является окончательным, поэтому я не могу просто обернуть его.Это означает, что мне нужно скопировать много кода, и это все равно даст мне метрики только для успешных рукопожатий.Копирование кода будет трудоемким обслуживанием, потому что это специфический код JRE.

...