From 441e210ea7abb765891d8f3a86ccf9a5c2405245 Mon Sep 17 00:00:00 2001 From: serega6531 Date: Fri, 24 Apr 2020 00:08:13 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BE=D0=B1=D1=89=D0=B5=D0=B5=20=D1=85=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=BB=D0=B8=D1=89=D0=B5=20=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ru/serega6531/packmate/model/CtfService.java | 2 ++ .../ru/serega6531/packmate/service/StreamService.java | 6 +++++- .../packmate/service/optimization/RsaKeysHolder.java | 8 +++++++- .../packmate/service/optimization/StreamOptimizer.java | 10 ++++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/serega6531/packmate/model/CtfService.java b/src/main/java/ru/serega6531/packmate/model/CtfService.java index b3d0fed..7b0788e 100644 --- a/src/main/java/ru/serega6531/packmate/model/CtfService.java +++ b/src/main/java/ru/serega6531/packmate/model/CtfService.java @@ -16,6 +16,8 @@ public class CtfService { private String name; + private boolean decryptTls; + private boolean processChunkedEncoding; private boolean ungzipHttp; diff --git a/src/main/java/ru/serega6531/packmate/service/StreamService.java b/src/main/java/ru/serega6531/packmate/service/StreamService.java index ed9fb36..9e8a77f 100644 --- a/src/main/java/ru/serega6531/packmate/service/StreamService.java +++ b/src/main/java/ru/serega6531/packmate/service/StreamService.java @@ -15,6 +15,7 @@ import ru.serega6531.packmate.model.pojo.Pagination; import ru.serega6531.packmate.model.pojo.SubscriptionMessage; import ru.serega6531.packmate.model.pojo.UnfinishedStream; import ru.serega6531.packmate.repository.StreamRepository; +import ru.serega6531.packmate.service.optimization.RsaKeysHolder; import ru.serega6531.packmate.service.optimization.StreamOptimizer; import java.util.HashSet; @@ -33,6 +34,7 @@ public class StreamService { private final ServicesService servicesService; private final CountingService countingService; private final SubscriptionService subscriptionService; + private final RsaKeysHolder keysHolder; private final boolean ignoreEmptyPackets; @@ -44,12 +46,14 @@ public class StreamService { ServicesService servicesService, CountingService countingService, SubscriptionService subscriptionService, + RsaKeysHolder keysHolder, @Value("${ignore-empty-packets}") boolean ignoreEmptyPackets) { this.repository = repository; this.patternService = patternService; this.servicesService = servicesService; this.countingService = countingService; this.subscriptionService = subscriptionService; + this.keysHolder = keysHolder; this.ignoreEmptyPackets = ignoreEmptyPackets; } @@ -94,7 +98,7 @@ public class StreamService { countingService.countStream(service.getPort(), packets.size()); - packets = new StreamOptimizer(service, packets).optimizeStream(); + packets = new StreamOptimizer(keysHolder, service, packets).optimizeStream(); processUserAgent(packets, stream); Stream savedStream = save(stream); diff --git a/src/main/java/ru/serega6531/packmate/service/optimization/RsaKeysHolder.java b/src/main/java/ru/serega6531/packmate/service/optimization/RsaKeysHolder.java index a6a725e..4364d45 100644 --- a/src/main/java/ru/serega6531/packmate/service/optimization/RsaKeysHolder.java +++ b/src/main/java/ru/serega6531/packmate/service/optimization/RsaKeysHolder.java @@ -1,5 +1,7 @@ package ru.serega6531.packmate.service.optimization; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import ru.serega6531.packmate.utils.TlsUtils; @@ -23,7 +25,6 @@ public class RsaKeysHolder { X509KeyManager keyManager = TlsUtils.createKeyManager(pemFile, keyFile); -// X509Certificate[] certificateChain = keyManager.getCertificateChain("1"); RSAPrivateKey privateKey = ((RSAPrivateKey) keyManager.getPrivateKey("1")); keys.put(privateKey.getModulus(), privateKey); } @@ -32,4 +33,9 @@ public class RsaKeysHolder { return keys.get(modulus); } + @EventListener(ApplicationReadyEvent.class) + public void afterStartup(ApplicationReadyEvent event) { + //TODO load keys + } + } diff --git a/src/main/java/ru/serega6531/packmate/service/optimization/StreamOptimizer.java b/src/main/java/ru/serega6531/packmate/service/optimization/StreamOptimizer.java index c54e2a7..d5995cc 100644 --- a/src/main/java/ru/serega6531/packmate/service/optimization/StreamOptimizer.java +++ b/src/main/java/ru/serega6531/packmate/service/optimization/StreamOptimizer.java @@ -12,6 +12,7 @@ import java.util.List; @Slf4j public class StreamOptimizer { + private final RsaKeysHolder keysHolder; private final CtfService service; private List packets; @@ -19,6 +20,10 @@ public class StreamOptimizer { * Вызвать для выполнения оптимизаций на переданном списке пакетов. */ public List optimizeStream() { + if (service.isDecryptTls()) { + decryptTls(); + } + if (service.isProcessChunkedEncoding()) { processChunkedEncoding(); } @@ -42,6 +47,11 @@ public class StreamOptimizer { return packets; } + private void decryptTls() { + final TlsDecryptor tlsDecryptor = new TlsDecryptor(packets, keysHolder); + tlsDecryptor.decryptTls(); // TODO + } + /** * Сжать соседние пакеты в одном направлении в один. * Выполняется после других оптимизаций чтобы правильно определять границы пакетов.