From eb5bd9b3981df58b5f931dbee729b26bede14c8e Mon Sep 17 00:00:00 2001 From: Subin Cho Date: Mon, 28 Apr 2025 23:54:50 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat=20|=20sprint1=20|=20FRB-30=20|=20IoT?= =?UTF-8?q?=20Core=EB=A1=9C=EB=B6=80=ED=84=B0=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EC=86=8C=EC=8A=A4=20=EB=B0=9B=EC=95=84=EC=98=A4?= =?UTF-8?q?=EA=B8=B0=20|=20=EC=A1=B0=EC=88=98=EB=B9=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 6 + .gitignore | 8 +- build.gradle | 11 +- .../com/monitory/data/FlinkApplication.java | 30 +--- .../com/monitory/data/config/mqttConfig.java | 8 + .../com/monitory/data/sources/MqttReader.java | 162 ++++++++++++++++++ .../com/monitory/data/sources/MqttSource.java | 73 ++++++++ .../com/monitory/data/sources/MqttSplit.java | 15 ++ .../data/sources/MqttSplitEnumerator.java | 42 +++++ .../java/com/monitory/data/utils/SslUtil.java | 87 ++++++++++ ...90ff9378d02a118bd41800-certificate.pem.crt | 20 +++ ...082c90ff9378d02a118bd41800-private.pem.key | 27 +++ ...4082c90ff9378d02a118bd41800-public.pem.key | 9 + src/main/resources/certs/root.pem | 20 +++ 14 files changed, 491 insertions(+), 27 deletions(-) create mode 100644 .env create mode 100644 src/main/java/com/monitory/data/config/mqttConfig.java create mode 100644 src/main/java/com/monitory/data/sources/MqttReader.java create mode 100644 src/main/java/com/monitory/data/sources/MqttSource.java create mode 100644 src/main/java/com/monitory/data/sources/MqttSplit.java create mode 100644 src/main/java/com/monitory/data/sources/MqttSplitEnumerator.java create mode 100644 src/main/java/com/monitory/data/utils/SslUtil.java create mode 100644 src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-certificate.pem.crt create mode 100644 src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-private.pem.key create mode 100644 src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-public.pem.key create mode 100644 src/main/resources/certs/root.pem diff --git a/.env b/.env new file mode 100644 index 0000000..ee3db7e --- /dev/null +++ b/.env @@ -0,0 +1,6 @@ +BROKER=ssl://a2n7kxevn6fh72-ats.iot.ap-northeast-2.amazonaws.com:8883 +TOPIC=# +CLIENT_ID=INF_TEST +CA_CERT_PATH=cert/AmazonRootCA1.pem +CLIENT_CERT_PATH=cert/certificate.pem.crt +PRIVATE_KEY_PATH=cert/private.pem.key \ No newline at end of file diff --git a/.gitignore b/.gitignore index b63da45..2834790 100644 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,10 @@ bin/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store + +# 인증서 파일 무시 +cert/ +*.pem +*.crt +*.key \ No newline at end of file diff --git a/build.gradle b/build.gradle index 337d801..62ea6c9 100644 --- a/build.gradle +++ b/build.gradle @@ -6,6 +6,12 @@ plugins { group = 'org.example' version = '1.0-SNAPSHOT' +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + repositories { mavenCentral() } @@ -13,8 +19,9 @@ repositories { dependencies { testImplementation platform('org.junit:junit-bom:5.10.0') testImplementation 'org.junit.jupiter:junit-jupiter' - compileOnly("org.projectlombok:lombok:1.18.38") - implementation 'org.slf4j:slf4j-api:1.7.32' + compileOnly 'org.projectlombok:lombok:1.18.30' + annotationProcessor 'org.projectlombok:lombok:1.18.30' + implementation 'ch.qos.logback:logback-classic:1.2.6' // flink diff --git a/src/main/java/com/monitory/data/FlinkApplication.java b/src/main/java/com/monitory/data/FlinkApplication.java index b3b7cba..52be518 100644 --- a/src/main/java/com/monitory/data/FlinkApplication.java +++ b/src/main/java/com/monitory/data/FlinkApplication.java @@ -1,13 +1,11 @@ package com.monitory.data; +import com.monitory.data.sources.MqttSource; +import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.configuration.Configuration; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; -import org.apache.flink.streaming.api.functions.source.legacy.SourceFunction; - -import java.util.Arrays; -import java.util.List; public class FlinkApplication { public static void main (String [] args) throws Exception { @@ -15,32 +13,16 @@ public static void main (String [] args) throws Exception { Configuration conf = new Configuration(); final StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(conf); - // 2. 커스텀 소스 사용 (예시로 간단한 데이터 소스) - DataStream sourceStream = env.addSource(new SourceFunction() { - private boolean running = true; - - @Override - public void run(SourceContext ctx) throws Exception { - List data = Arrays.asList("Hello", "Flink", "Stream"); - for (String item : data) { - if (!running) { - return; - } - ctx.collect(item); // 데이터 한 항목씩 전달 - } - } + // 2. 데이터 소스 + DataStream sourceStream = env.fromSource(new MqttSource(), WatermarkStrategy.noWatermarks(), "MQTT-Source"); - @Override - public void cancel() { - running = false; // 소스 중지 - } - }); // 3. 데이터 처리: 단순하게 문자열을 대문자로 변환하는 예시 DataStream transformedStream = sourceStream .map(new MapFunction() { @Override public String map(String value) throws Exception { - Thread.sleep(2000000); +// Thread.sleep(2000000); + System.out.println("💡 received: " + value); return value.toUpperCase(); } }); diff --git a/src/main/java/com/monitory/data/config/mqttConfig.java b/src/main/java/com/monitory/data/config/mqttConfig.java new file mode 100644 index 0000000..ca91116 --- /dev/null +++ b/src/main/java/com/monitory/data/config/mqttConfig.java @@ -0,0 +1,8 @@ +package com.monitory.data.config; + +import java.beans.JavaBean; + +@JavaBean +public class mqttConfig { + +} diff --git a/src/main/java/com/monitory/data/sources/MqttReader.java b/src/main/java/com/monitory/data/sources/MqttReader.java new file mode 100644 index 0000000..4ec1f52 --- /dev/null +++ b/src/main/java/com/monitory/data/sources/MqttReader.java @@ -0,0 +1,162 @@ +package com.monitory.data.sources; + +import com.monitory.data.utils.SslUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.flink.api.connector.source.ReaderOutput; +import org.apache.flink.api.connector.source.SourceReader; +import org.apache.flink.api.connector.source.SourceReaderContext; +import org.apache.flink.core.io.InputStatus; +import org.eclipse.paho.client.mqttv3.IMqttMessageListener; +import org.eclipse.paho.client.mqttv3.MqttClient; +import org.eclipse.paho.client.mqttv3.MqttConnectOptions; +import org.eclipse.paho.client.mqttv3.MqttMessage; + +import javax.net.ssl.SSLSocketFactory; +import java.util.List; +import java.util.Queue; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentLinkedQueue; + +/** + * MQTT 메시지를 읽어오는 SourceReader + * - Flink에서 데이터를 가져오는 역할 + */ +@Slf4j +public class MqttReader implements SourceReader { + // Flink에서 SourceReader와 상호작용하는 데 필요한 context + private final SourceReaderContext sourceReaderContext; + // MQTT로 읽은 메시지를 임시로 저장할 큐 + private final Queue messageQueue = new ConcurrentLinkedQueue<>(); + // 메시지를 계속 읽어오게 할지 여부 + private volatile boolean running = true; + private MqttClient client; + + IMqttMessageListener mqttMessageListener = new IMqttMessageListener() { + @Override + public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { + messageQueue.add(new String(mqttMessage.getPayload())); + } + }; + + public MqttReader(SourceReaderContext sourceReaderContext) { + this.sourceReaderContext = sourceReaderContext; + } + /** + * SourceReader 시작 시 호출됨 + * MQTT 클라이언트 연결 및 구독 등을 처리할 수 있음 + * (현재는 비어 있음) + */ + @Override + public void start() { + try { + String broker = "ssl://a2n7kxevn6fh72-ats.iot.ap-northeast-2.amazonaws.com:8883"; + String topic = "#"; + String clientId = "INF_TEST"; + SslUtil sslUtil = new SslUtil(); + SSLSocketFactory temp = sslUtil.getSocketFactory( + "src/main/resources/certs/root.pem", + "src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-certificate.pem.crt", + "src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-private.pem.key" + ); + MqttConnectOptions options = new MqttConnectOptions(); + options.setSocketFactory(temp); + options.setCleanSession(true); + options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1); + options.setAutomaticReconnect(true); + options.setConnectionTimeout(60); + + client = new MqttClient(broker, clientId); + log.info("⭐️ Connecting to MQTT broker: {}", broker); + client.setCallback(new org.eclipse.paho.client.mqttv3.MqttCallbackExtended() { + @Override + public void connectComplete(boolean reconnect, String serverURI) { + log.info("✅ MQTT 연결 완료: reconnect={}, serverURI={}", reconnect, serverURI); + try { + if (client.isConnected()) { + client.subscribe(topic, mqttMessageListener); + log.info("📡 MQTT subscribe 완료: topic = {}", topic); + } else { + log.warn("⚠️ MQTT 클라이언트가 연결되지 않았습니다."); + } + } catch (Exception e) { + log.error("❌ MQTT subscribe 실패", e); + } + } + + @Override + public void connectionLost(Throwable cause) { + log.warn("⚠️ MQTT 연결 끊김", cause); + } + + @Override + public void messageArrived(String topic, MqttMessage message) { + messageQueue.add(new String(message.getPayload())); + } + + @Override + public void deliveryComplete(org.eclipse.paho.client.mqttv3.IMqttDeliveryToken token) {} + }); + + client.connect(options); + if (!client.isConnected()) { + log.error("❌ MQTT 연결 실패: 연결이 되지 않았습니다."); + throw new RuntimeException("MQTT 연결 실패"); + } else { + log.info("✅ MQTT 연결 성공"); + } + + } catch (Exception e) { + log.error("❌ MQTT Connection setup 중 예외 발생", e); + } + } + /** + * 큐에서 메시지를 하나씩 꺼내서 Flink에 전달 + * - 메시지가 있으면 데이터를 전달하고, 계속 받을 수 있음을 알림 + * - 메시지가 없으면 더 이상 데이터를 받을 수 없다고 알림 + */ + @Override + public InputStatus pollNext(ReaderOutput output) { + String msg = messageQueue.poll(); + if (msg != null) { + output.collect(msg); + return InputStatus.MORE_AVAILABLE; + } + return InputStatus.NOTHING_AVAILABLE; + } + /** + * 체크포인트 상태를 스냅샷으로 저장하는 메소드 + * - 현재 상태가 없으므로 빈 리스트 반환 + */ + @Override + public List snapshotState(long l) { + return List.of(); + } + /** + * 메시지가 수신될 때까지 대기 + * - 여기서는 구현되지 않음 + */ + @Override + public CompletableFuture isAvailable() { + return CompletableFuture.completedFuture(null); + } + + @Override + public void addSplits(List list) { + + } + + @Override + public void notifyNoMoreSplits() { + + } + + @Override + public void close() throws Exception { + running = false; + if (client != null && client.isConnected()) { + client.disconnect(); + client.close(); + log.info("🛑 MQTT Client disconnected and closed."); + } + } +} diff --git a/src/main/java/com/monitory/data/sources/MqttSource.java b/src/main/java/com/monitory/data/sources/MqttSource.java new file mode 100644 index 0000000..8951950 --- /dev/null +++ b/src/main/java/com/monitory/data/sources/MqttSource.java @@ -0,0 +1,73 @@ +package com.monitory.data.sources; + +import org.apache.flink.api.connector.source.*; +import org.apache.flink.core.io.SimpleVersionedSerializer; + +import java.nio.charset.StandardCharsets; +/** + * Flink에서 사용하는 커스텀 MQTT Source + * Source + * - T: 읽어올 데이터 타입 (여기선 String) + * - SplitT: 데이터를 나누는 단위 (MqttSplit) + * - CheckpointT: 체크포인트에 저장할 상태 (여기선 Void) + */ +public class MqttSource implements Source { + /** + * 이 소스는 실시간 데이터 스트림이기 때문에 "Unbounded" (끝이 없음) + */ + @Override + public Boundedness getBoundedness() { + return Boundedness.CONTINUOUS_UNBOUNDED; + } + + /** + * SplitEnumerator 생성: 각 parallel task에 split을 분배하는 역할 + */ + @Override + public SplitEnumerator createEnumerator(SplitEnumeratorContext splitEnumeratorContext) throws Exception { + return new MqttSplitEnumerator(splitEnumeratorContext); + } + + /** + * 장애 복구 시 사용: 이전 상태에서 SplitEnumerator 복구 + */ + @Override + public SplitEnumerator restoreEnumerator(SplitEnumeratorContext splitEnumeratorContext, Void checkpoint) throws Exception { + return createEnumerator(splitEnumeratorContext); + } + + /** + * Split을 직렬화/역직렬화하는 방법 정의 (필수) + */ + @Override + public SimpleVersionedSerializer getSplitSerializer() { + return new SimpleVersionedSerializer<>() { + @Override public int getVersion() { return 1; } + @Override public byte[] serialize(MqttSplit split) { + return split.splitId().getBytes(StandardCharsets.UTF_8); + } + + @Override public MqttSplit deserialize(int version, byte[] serialized) { + return new MqttSplit(new String(serialized, StandardCharsets.UTF_8)); + } + }; + } + /** + * Enumerator의 체크포인트 상태 직렬화 (우린 상태 없음) + */ + @Override + public SimpleVersionedSerializer getEnumeratorCheckpointSerializer() { + return new SimpleVersionedSerializer<>() { + @Override public int getVersion() { return 1; } + @Override public byte[] serialize(Void obj) { return new byte[0]; } + @Override public Void deserialize(int version, byte[] serialized) { return null; } + }; + } + /** + * SourceReader 생성: 실제 MQTT 데이터를 읽어오는 곳 + */ + @Override + public SourceReader createReader(SourceReaderContext sourceReaderContext) throws Exception { + return new MqttReader(sourceReaderContext); + } +} diff --git a/src/main/java/com/monitory/data/sources/MqttSplit.java b/src/main/java/com/monitory/data/sources/MqttSplit.java new file mode 100644 index 0000000..1f78807 --- /dev/null +++ b/src/main/java/com/monitory/data/sources/MqttSplit.java @@ -0,0 +1,15 @@ +package com.monitory.data.sources; + +import org.apache.flink.api.connector.source.SourceSplit; + +public class MqttSplit implements SourceSplit { + private final String splitId; + + public MqttSplit(String splitId) { + this.splitId = splitId; + } + @Override + public String splitId() { + return splitId; + } +} diff --git a/src/main/java/com/monitory/data/sources/MqttSplitEnumerator.java b/src/main/java/com/monitory/data/sources/MqttSplitEnumerator.java new file mode 100644 index 0000000..e9359d3 --- /dev/null +++ b/src/main/java/com/monitory/data/sources/MqttSplitEnumerator.java @@ -0,0 +1,42 @@ +package com.monitory.data.sources; + +import org.apache.flink.api.connector.source.SplitEnumerator; +import org.apache.flink.api.connector.source.SplitEnumeratorContext; +import org.jetbrains.annotations.Nullable; + +import java.io.IOException; +import java.util.List; + +/** + * MQTT용 SplitEnumerator + * - Flink에서 parallel reader에게 데이터를 분배할 "split"을 지정하는 역할 + */ +public class MqttSplitEnumerator implements SplitEnumerator { + private final SplitEnumeratorContext context; + + // Flink에서 이 enumerator와 상호작용하는 데 필요한 context + public MqttSplitEnumerator(SplitEnumeratorContext context) { + this.context = context; + } + + /** + * Flink가 enumerator를 시작할 때 호출됨 + * 여기서는 단일 split("mqtt-split")을 0번 서브태스크에게 할당하고, + * 더 이상 split이 없다고 알림 + */ + @Override + public void start() { +// context.assignSplit(new MqttSplit("mqtt-split"), 0); +// context.signalNoMoreSplits(0); + } + + @Override public void handleSplitRequest(int subtaskId, @Nullable String requesterHostname) {} + @Override public void addSplitsBack(List list, int i) {} + @Override public void addReader(int subtaskId) { + System.out.println("Subtask " + subtaskId + " is ready, assigning split..."); + MqttSplit split = new MqttSplit("mqtt-split-"+subtaskId); // 네가 설계한 split 객체 + context.assignSplit(split, subtaskId); + } + @Override public Void snapshotState(long checkpointId) { return null; } + @Override public void close() {} +} diff --git a/src/main/java/com/monitory/data/utils/SslUtil.java b/src/main/java/com/monitory/data/utils/SslUtil.java new file mode 100644 index 0000000..07bd677 --- /dev/null +++ b/src/main/java/com/monitory/data/utils/SslUtil.java @@ -0,0 +1,87 @@ +package com.monitory.data.utils; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.bouncycastle.openssl.PEMKeyPair; +import org.bouncycastle.openssl.PEMParser; +import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; + +import javax.net.ssl.*; +import java.io.*; +import java.security.*; +import java.security.cert.Certificate; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; +import java.util.Arrays; +import java.util.stream.Stream; + +/** + * 🔐 AWS IoT MQTT 통신을 위한 SSLContext 생성 유틸리티 클래스 + * - 인증서 (device cert, private key, CA cert)를 이용하여 SSL 소켓을 생성함 + */ +public class SslUtil { + + /** + * 📦 MQTT 연결용 SSLSocketFactory 생성 메서드 + * + * @param caCrtFile AWS 루트 인증서 경로 (root.pem) + * @param crtFile 디바이스 인증서 경로 (.pem.crt) + * @param keyFile 디바이스 개인키 경로 (.pem.key) + * @return SSLSocketFactory 객체 + * @throws Exception 모든 예외 전달 (파일, 키, 인증서 파싱 오류 등) + */ + public static SSLSocketFactory getSocketFactory(String caCrtFile, String crtFile, String keyFile) throws Exception { + + // BouncyCastle Provider 등록 (PEM 파싱용) + Security.addProvider(new BouncyCastleProvider()); + + // CA 인증서와 디바이스 인증서 + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + X509Certificate caCert = (X509Certificate) cf.generateCertificate(new FileInputStream(caCrtFile)); + X509Certificate cert = (X509Certificate) cf.generateCertificate(new FileInputStream(crtFile)); + + // 디바이스 개인키 PEM → Keypair 변환 + PEMParser pemParser = new PEMParser(new FileReader(keyFile)); + Object object = pemParser.readObject(); + JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC"); + KeyPair key = converter.getKeyPair((PEMKeyPair) object); + pemParser.close(); + + // 키스토어 구성 (디바이스 인증서 + 개인키) +// KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); + KeyStore ks = KeyStore.getInstance("JKS"); + ks.load(null, null); + ks.setCertificateEntry("cert-alias", cert); + ks.setKeyEntry("key-alias", key.getPrivate(), "".toCharArray(), new Certificate[]{cert}); + + // 트러스트스토어 구성 (루트 CA 인증서) + KeyStore ts = KeyStore.getInstance(KeyStore.getDefaultType()); + ts.load(null, null); + ts.setCertificateEntry("ca-alias", caCert); + + + // [추가] JVM 기본 TrustManager (기본 TrustStore 포함) + TrustManagerFactory jvmTmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + jvmTmf.init((KeyStore) null); // ← 기본 truststore 사용 + + + // ✅ [기존] root.pem 기반 TrustManager + TrustManagerFactory customTmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + customTmf.init(ts); + + + // ✅ [추가] TrustManager 병합 (기본 + root.pem) + TrustManager[] mergedTrustManagers = Stream + .concat(Arrays.stream(jvmTmf.getTrustManagers()), Arrays.stream(customTmf.getTrustManagers())) + .toArray(TrustManager[]::new); + + + // 5. KeyManagerFactory 구성 + KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); + kmf.init(ks, "".toCharArray()); + + SSLContext context = SSLContext.getInstance("TLSv1.2"); + context.init(kmf.getKeyManagers(), mergedTrustManagers, null); // ✅ [변경] 병합한 TrustManager 적용 + + return context.getSocketFactory(); + } +} \ No newline at end of file diff --git a/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-certificate.pem.crt b/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-certificate.pem.crt new file mode 100644 index 0000000..030f5d0 --- /dev/null +++ b/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-certificate.pem.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIVAI+z1X/xSlmDJQrQ6GV8YQ6Ql4sTMA0GCSqGSIb3DQEB +CwUAME0xSzBJBgNVBAsMQkFtYXpvbiBXZWIgU2VydmljZXMgTz1BbWF6b24uY29t +IEluYy4gTD1TZWF0dGxlIFNUPVdhc2hpbmd0b24gQz1VUzAeFw0yNTA0MjQwOTU2 +NDNaFw00OTEyMzEyMzU5NTlaMB4xHDAaBgNVBAMME0FXUyBJb1QgQ2VydGlmaWNh +dGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDYWcdcAkU49rGi7vMa +pFGHDEGWBolfZ5M/kybSJ2bt4R4DLDgh/NgceYGW4BSpSLfFPDuLGMWiK1oA3mPz +HxOZCD2sn741K1IYCIFzBvwO7XzLHidTngkE0nYh3EGNlvEdGE3hErSB3iLp0Rjc +AISPxRnpa1I+Pf9vS4HR5zsBzrfsmL2FilqXo8+9STTKARucv7QGG1Yn3ZJ3jY5i +QPieNUC3+kW88b40QTTiY8kcMORHc4PrRu5YTPZLDYeS3VaXlYhqFnfPIBpMGZYW +cvj2PdAPemvdOh0yMQAUSqm37HsD3KgSyXZQ462GZy0OBFWxJ2H7p9hAVv9PevWz +w6+5AgMBAAGjYDBeMB8GA1UdIwQYMBaAFDnFUUR2GxPTIklLHeY331skihQqMB0G +A1UdDgQWBBQSPZFPoPAPaKf/avlQpI35Vy5RYDAMBgNVHRMBAf8EAjAAMA4GA1Ud +DwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAQEAjk6AZfsj/DuiJ4qtZs9OZjIH +iTjtmlgOq54SlYAf3puy4Zg3fvqj0+je5et2VKiVj+9kG8ek2y9ngv+JWtPuxmQV +w/DcrJWwebmoAg2KY/nf+zZQQB5qxuEcwxBLXO+38m27ZaprGpu7NAvFwwWDZfKn +5LDKlkH8OypF1rR1YPEGF2Gu/wrmjtI1mNdiWxi2qoXy8vt+8JKNIFEKSDXpXLvY +5bDuvftwpAX8MxKiSdsB7XiFpEIhA5twtMnjWrqDBLibch9/HLFJij3QEdrBztFM +uIDqDPdbRv2sVA5E2nAdpGWHnBGf5thBc2kETPCr9W44Fgz6yhXSeqRMfUBq6A== +-----END CERTIFICATE----- diff --git a/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-private.pem.key b/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-private.pem.key new file mode 100644 index 0000000..5d5b1fd --- /dev/null +++ b/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-private.pem.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA2FnHXAJFOPaxou7zGqRRhwxBlgaJX2eTP5Mm0idm7eEeAyw4 +IfzYHHmBluAUqUi3xTw7ixjFoitaAN5j8x8TmQg9rJ++NStSGAiBcwb8Du18yx4n +U54JBNJ2IdxBjZbxHRhN4RK0gd4i6dEY3ACEj8UZ6WtSPj3/b0uB0ec7Ac637Ji9 +hYpal6PPvUk0ygEbnL+0BhtWJ92Sd42OYkD4njVAt/pFvPG+NEE04mPJHDDkR3OD +60buWEz2Sw2Hkt1Wl5WIahZ3zyAaTBmWFnL49j3QD3pr3TodMjEAFEqpt+x7A9yo +Esl2UOOthmctDgRVsSdh+6fYQFb/T3r1s8OvuQIDAQABAoIBAEUcUMHEe+ZZb58z +o3bEPMLeGGlbRzCxvmjVkdYZ/hhJDDRJQNkiksptygavKAp3jzSzK/YgAKnwHT0f +zV/Rcoo1BraJBNKpNv00Yl2jQotmM7ISvM9KMWlX7aKdYFdhez4nEGGwfvbpRc/Z +Go7Un4Ppm4Bj5w648UrVHPA3ZDMMBnsQnDsiO8V0JJld19ndau99/KfWbGfO7eln +Rtj1SDXoHcEDHenD4j5vs11jrFSxX7fkEBpMeewSJUu9WqEbT0KlGzDP+nb6Q7k/ +AdoV17IUwVz7s59TLNUFXwfJ815aHoKricY/VDPpQMq32UDFEV0liHLMaWFArB7r +qqfndDECgYEA7IX958B13WjIKnQsOFdSG8xwPMeXhLTsgKg2xDDjC4cFc+RryNIP +pYPs5LQ3jZvRDbso2RTwuUdCWfDibHte40IusrZFVZ6ydc7Ix+47TxSc72m4oMaU +YySLrJuHc+SHvLPJe5b0ovRSAWYs8tmEV2N8OIj0XP0Ei/4ILtcmVW0CgYEA6iqJ +xd0qBjSLkuy16TEi8D+HKfzfTrmw0CoIwf86q3iX8/F3+f2CaODT22k17tNMWnOk +XLfhkiExuYSnY9g80Q1SzomgjAnA30btZmktk/HWccOkadk2+RA/ecf3NAMjoRb0 +ruCBgi/hk2zOPUdwDugmejAIstIDhjdFJVfTb/0CgYEAv5DmzMV8sQ8kz/23swpG +Xm1+mjut5LYEt0+Gy/AsdDGvoOXoxoYcVho7zCCKvg7tiwmDVA85yVaFzwLi4Kor +eDUqTWSDU41tTS1mQUgakTpIwUAHYXB0zrfSyMJPOvZlWdjj302sZi8sHCX9UdQK +9ByHh+KkyIvFGv1s80MesSECgYEApkrxLkeiiWeVWxCpGuJfKngi98lxmAm8rAe9 +0m77bjwkxQNNLYY/r1VCfoWX3HPHvFB1f7bCBTF3i4TODtTIU7l/fdc04V4nzygi +fWDiEjdjD8VdJCIyrOtB+KzuO8yi58pSl0IuFpMEQdq6F8B8rslkUc98zejgwdbM +Tvmw2M0CgYAMiBOJdZV11MAuvNjdl9VaGkuaqrVZeZLHwEezacwiV/kH/sym0yHM +2EJR6ZGQ8nRHT5noiCYII8kcc+1aP1bWVeCJ2+KBQJLwDtnMpYPsxZSQReO5GkU1 +DSNeKI7kaR3v2gk/IhFloAzUwfcvu93m2oST/+USG4aGYvOrj4mvVA== +-----END RSA PRIVATE KEY----- diff --git a/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-public.pem.key b/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-public.pem.key new file mode 100644 index 0000000..76625c4 --- /dev/null +++ b/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-public.pem.key @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2FnHXAJFOPaxou7zGqRR +hwxBlgaJX2eTP5Mm0idm7eEeAyw4IfzYHHmBluAUqUi3xTw7ixjFoitaAN5j8x8T +mQg9rJ++NStSGAiBcwb8Du18yx4nU54JBNJ2IdxBjZbxHRhN4RK0gd4i6dEY3ACE +j8UZ6WtSPj3/b0uB0ec7Ac637Ji9hYpal6PPvUk0ygEbnL+0BhtWJ92Sd42OYkD4 +njVAt/pFvPG+NEE04mPJHDDkR3OD60buWEz2Sw2Hkt1Wl5WIahZ3zyAaTBmWFnL4 +9j3QD3pr3TodMjEAFEqpt+x7A9yoEsl2UOOthmctDgRVsSdh+6fYQFb/T3r1s8Ov +uQIDAQAB +-----END PUBLIC KEY----- diff --git a/src/main/resources/certs/root.pem b/src/main/resources/certs/root.pem new file mode 100644 index 0000000..1aab05d --- /dev/null +++ b/src/main/resources/certs/root.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj +ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM +9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw +IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 +VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L +93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm +jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA +A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI +U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs +N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv +o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU +5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy +rqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- \ No newline at end of file From 084ffb6aa8c753f5225c024ec6902f63e19d5ee6 Mon Sep 17 00:00:00 2001 From: Subin Cho Date: Tue, 29 Apr 2025 09:58:01 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat=20|=20sprint1=20|=20FRB-30=20|=20?= =?UTF-8?q?=ED=99=98=EA=B2=BD=EB=B3=80=EC=88=98=20=EB=B6=84=EB=A6=AC=20|?= =?UTF-8?q?=20=EC=A1=B0=EC=88=98=EB=B9=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 6 ----- .gitignore | 7 ++++-- .../.lck | 0 .../com/monitory/data/config/MqttConfig.java | 24 +++++++++++++++++++ .../com/monitory/data/config/mqttConfig.java | 8 ------- .../com/monitory/data/sources/MqttReader.java | 18 +++++++------- src/main/resources/application.properties | 6 +++++ 7 files changed, 45 insertions(+), 24 deletions(-) delete mode 100644 .env create mode 100644 INF_TEST-ssla2n7kxevn6fh72-atsiotap-northeast-2amazonawscom8883/.lck create mode 100644 src/main/java/com/monitory/data/config/MqttConfig.java delete mode 100644 src/main/java/com/monitory/data/config/mqttConfig.java create mode 100644 src/main/resources/application.properties diff --git a/.env b/.env deleted file mode 100644 index ee3db7e..0000000 --- a/.env +++ /dev/null @@ -1,6 +0,0 @@ -BROKER=ssl://a2n7kxevn6fh72-ats.iot.ap-northeast-2.amazonaws.com:8883 -TOPIC=# -CLIENT_ID=INF_TEST -CA_CERT_PATH=cert/AmazonRootCA1.pem -CLIENT_CERT_PATH=cert/certificate.pem.crt -PRIVATE_KEY_PATH=cert/private.pem.key \ No newline at end of file diff --git a/.gitignore b/.gitignore index 2834790..c13cf47 100644 --- a/.gitignore +++ b/.gitignore @@ -41,8 +41,11 @@ bin/ ### Mac OS ### .DS_Store -# 인증서 파일 무시 +### 인증서 파일 ### cert/ *.pem *.crt -*.key \ No newline at end of file +*.key + +### application.properties ### +/application.properties \ No newline at end of file diff --git a/INF_TEST-ssla2n7kxevn6fh72-atsiotap-northeast-2amazonawscom8883/.lck b/INF_TEST-ssla2n7kxevn6fh72-atsiotap-northeast-2amazonawscom8883/.lck new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/com/monitory/data/config/MqttConfig.java b/src/main/java/com/monitory/data/config/MqttConfig.java new file mode 100644 index 0000000..869c737 --- /dev/null +++ b/src/main/java/com/monitory/data/config/MqttConfig.java @@ -0,0 +1,24 @@ +package com.monitory.data.config; + +import java.io.InputStream; +import java.util.Properties; + +public class MqttConfig { + private static final Properties properties = new Properties(); + + static { + try (InputStream input = MqttConfig.class.getClassLoader() + .getResourceAsStream("application.properties")) { + if (input == null) { + throw new RuntimeException("❌ application.properties 파일을 찾을 수 없습니다."); + } + properties.load(input); + } catch (Exception e) { + throw new RuntimeException("❌ properties 파일 로딩 실패", e); + } + } + + public static String get(String key) { + return properties.getProperty(key); + } +} diff --git a/src/main/java/com/monitory/data/config/mqttConfig.java b/src/main/java/com/monitory/data/config/mqttConfig.java deleted file mode 100644 index ca91116..0000000 --- a/src/main/java/com/monitory/data/config/mqttConfig.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.monitory.data.config; - -import java.beans.JavaBean; - -@JavaBean -public class mqttConfig { - -} diff --git a/src/main/java/com/monitory/data/sources/MqttReader.java b/src/main/java/com/monitory/data/sources/MqttReader.java index 4ec1f52..d7854d8 100644 --- a/src/main/java/com/monitory/data/sources/MqttReader.java +++ b/src/main/java/com/monitory/data/sources/MqttReader.java @@ -1,5 +1,6 @@ package com.monitory.data.sources; +import com.monitory.data.config.MqttConfig; import com.monitory.data.utils.SslUtil; import lombok.extern.slf4j.Slf4j; import org.apache.flink.api.connector.source.ReaderOutput; @@ -49,15 +50,16 @@ public MqttReader(SourceReaderContext sourceReaderContext) { @Override public void start() { try { - String broker = "ssl://a2n7kxevn6fh72-ats.iot.ap-northeast-2.amazonaws.com:8883"; - String topic = "#"; - String clientId = "INF_TEST"; + String broker = MqttConfig.get("AWS_IOT_BROKER"); + String topic = MqttConfig.get("AWS_IOT_TOPIC"); + String clientId = MqttConfig.get("AWS_IOT_CLIENT_ID"); + SslUtil sslUtil = new SslUtil(); SSLSocketFactory temp = sslUtil.getSocketFactory( - "src/main/resources/certs/root.pem", - "src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-certificate.pem.crt", - "src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-private.pem.key" - ); + MqttConfig.get("AWS_IOT_CA_PEM_PATH"), + MqttConfig.get("AWS_IOT_CERT_PATH"), + MqttConfig.get("AWS_IOT_PRIVATE_KEY_PATH") + ); MqttConnectOptions options = new MqttConnectOptions(); options.setSocketFactory(temp); options.setCleanSession(true); @@ -106,7 +108,7 @@ public void deliveryComplete(org.eclipse.paho.client.mqttv3.IMqttDeliveryToken t } } catch (Exception e) { - log.error("❌ MQTT Connection setup 중 예외 발생", e); +// log.error("❌ MQTT Connection setup 중 예외 발생", e); } } /** diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..dc44fd9 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,6 @@ +AWS_IOT_BROKER=ssl://a2n7kxevn6fh72-ats.iot.ap-northeast-2.amazonaws.com:8883 +AWS_IOT_TOPIC=# +AWS_IOT_CLIENT_ID=INF_TEST +AWS_IOT_CA_PEM_PATH=src/main/resources/certs/root.pem +AWS_IOT_CERT_PATH=src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-certificate.pem.crt +AWS_IOT_PRIVATE_KEY_PATH=src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-private.pem.key From e4deb25d378389d1b7423dba71241b950c4c7af5 Mon Sep 17 00:00:00 2001 From: Subin Cho Date: Tue, 29 Apr 2025 10:12:18 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat=20|=20sprint1=20|=20FRB-30=20|=20gitig?= =?UTF-8?q?nore=20=EC=9E=AC=EC=84=A4=EC=A0=95=20|=20=EC=A1=B0=EC=88=98?= =?UTF-8?q?=EB=B9=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 11 +++----- src/main/resources/application.properties | 6 ----- ...90ff9378d02a118bd41800-certificate.pem.crt | 20 -------------- ...082c90ff9378d02a118bd41800-private.pem.key | 27 ------------------- ...4082c90ff9378d02a118bd41800-public.pem.key | 9 ------- src/main/resources/certs/root.pem | 20 -------------- 6 files changed, 4 insertions(+), 89 deletions(-) delete mode 100644 src/main/resources/application.properties delete mode 100644 src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-certificate.pem.crt delete mode 100644 src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-private.pem.key delete mode 100644 src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-public.pem.key delete mode 100644 src/main/resources/certs/root.pem diff --git a/.gitignore b/.gitignore index c13cf47..b72e941 100644 --- a/.gitignore +++ b/.gitignore @@ -41,11 +41,8 @@ bin/ ### Mac OS ### .DS_Store -### 인증서 파일 ### -cert/ -*.pem -*.crt -*.key +# resources 안의 certs 폴더 무시 +/src/main/resources/certs/ -### application.properties ### -/application.properties \ No newline at end of file +# resources 안의 application.properties 무시 +/src/main/resources/application.properties diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index dc44fd9..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,6 +0,0 @@ -AWS_IOT_BROKER=ssl://a2n7kxevn6fh72-ats.iot.ap-northeast-2.amazonaws.com:8883 -AWS_IOT_TOPIC=# -AWS_IOT_CLIENT_ID=INF_TEST -AWS_IOT_CA_PEM_PATH=src/main/resources/certs/root.pem -AWS_IOT_CERT_PATH=src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-certificate.pem.crt -AWS_IOT_PRIVATE_KEY_PATH=src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-private.pem.key diff --git a/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-certificate.pem.crt b/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-certificate.pem.crt deleted file mode 100644 index 030f5d0..0000000 --- a/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-certificate.pem.crt +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIVAI+z1X/xSlmDJQrQ6GV8YQ6Ql4sTMA0GCSqGSIb3DQEB -CwUAME0xSzBJBgNVBAsMQkFtYXpvbiBXZWIgU2VydmljZXMgTz1BbWF6b24uY29t -IEluYy4gTD1TZWF0dGxlIFNUPVdhc2hpbmd0b24gQz1VUzAeFw0yNTA0MjQwOTU2 -NDNaFw00OTEyMzEyMzU5NTlaMB4xHDAaBgNVBAMME0FXUyBJb1QgQ2VydGlmaWNh -dGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDYWcdcAkU49rGi7vMa -pFGHDEGWBolfZ5M/kybSJ2bt4R4DLDgh/NgceYGW4BSpSLfFPDuLGMWiK1oA3mPz -HxOZCD2sn741K1IYCIFzBvwO7XzLHidTngkE0nYh3EGNlvEdGE3hErSB3iLp0Rjc -AISPxRnpa1I+Pf9vS4HR5zsBzrfsmL2FilqXo8+9STTKARucv7QGG1Yn3ZJ3jY5i -QPieNUC3+kW88b40QTTiY8kcMORHc4PrRu5YTPZLDYeS3VaXlYhqFnfPIBpMGZYW -cvj2PdAPemvdOh0yMQAUSqm37HsD3KgSyXZQ462GZy0OBFWxJ2H7p9hAVv9PevWz -w6+5AgMBAAGjYDBeMB8GA1UdIwQYMBaAFDnFUUR2GxPTIklLHeY331skihQqMB0G -A1UdDgQWBBQSPZFPoPAPaKf/avlQpI35Vy5RYDAMBgNVHRMBAf8EAjAAMA4GA1Ud -DwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAQEAjk6AZfsj/DuiJ4qtZs9OZjIH -iTjtmlgOq54SlYAf3puy4Zg3fvqj0+je5et2VKiVj+9kG8ek2y9ngv+JWtPuxmQV -w/DcrJWwebmoAg2KY/nf+zZQQB5qxuEcwxBLXO+38m27ZaprGpu7NAvFwwWDZfKn -5LDKlkH8OypF1rR1YPEGF2Gu/wrmjtI1mNdiWxi2qoXy8vt+8JKNIFEKSDXpXLvY -5bDuvftwpAX8MxKiSdsB7XiFpEIhA5twtMnjWrqDBLibch9/HLFJij3QEdrBztFM -uIDqDPdbRv2sVA5E2nAdpGWHnBGf5thBc2kETPCr9W44Fgz6yhXSeqRMfUBq6A== ------END CERTIFICATE----- diff --git a/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-private.pem.key b/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-private.pem.key deleted file mode 100644 index 5d5b1fd..0000000 --- a/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-private.pem.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEA2FnHXAJFOPaxou7zGqRRhwxBlgaJX2eTP5Mm0idm7eEeAyw4 -IfzYHHmBluAUqUi3xTw7ixjFoitaAN5j8x8TmQg9rJ++NStSGAiBcwb8Du18yx4n -U54JBNJ2IdxBjZbxHRhN4RK0gd4i6dEY3ACEj8UZ6WtSPj3/b0uB0ec7Ac637Ji9 -hYpal6PPvUk0ygEbnL+0BhtWJ92Sd42OYkD4njVAt/pFvPG+NEE04mPJHDDkR3OD -60buWEz2Sw2Hkt1Wl5WIahZ3zyAaTBmWFnL49j3QD3pr3TodMjEAFEqpt+x7A9yo -Esl2UOOthmctDgRVsSdh+6fYQFb/T3r1s8OvuQIDAQABAoIBAEUcUMHEe+ZZb58z -o3bEPMLeGGlbRzCxvmjVkdYZ/hhJDDRJQNkiksptygavKAp3jzSzK/YgAKnwHT0f -zV/Rcoo1BraJBNKpNv00Yl2jQotmM7ISvM9KMWlX7aKdYFdhez4nEGGwfvbpRc/Z -Go7Un4Ppm4Bj5w648UrVHPA3ZDMMBnsQnDsiO8V0JJld19ndau99/KfWbGfO7eln -Rtj1SDXoHcEDHenD4j5vs11jrFSxX7fkEBpMeewSJUu9WqEbT0KlGzDP+nb6Q7k/ -AdoV17IUwVz7s59TLNUFXwfJ815aHoKricY/VDPpQMq32UDFEV0liHLMaWFArB7r -qqfndDECgYEA7IX958B13WjIKnQsOFdSG8xwPMeXhLTsgKg2xDDjC4cFc+RryNIP -pYPs5LQ3jZvRDbso2RTwuUdCWfDibHte40IusrZFVZ6ydc7Ix+47TxSc72m4oMaU -YySLrJuHc+SHvLPJe5b0ovRSAWYs8tmEV2N8OIj0XP0Ei/4ILtcmVW0CgYEA6iqJ -xd0qBjSLkuy16TEi8D+HKfzfTrmw0CoIwf86q3iX8/F3+f2CaODT22k17tNMWnOk -XLfhkiExuYSnY9g80Q1SzomgjAnA30btZmktk/HWccOkadk2+RA/ecf3NAMjoRb0 -ruCBgi/hk2zOPUdwDugmejAIstIDhjdFJVfTb/0CgYEAv5DmzMV8sQ8kz/23swpG -Xm1+mjut5LYEt0+Gy/AsdDGvoOXoxoYcVho7zCCKvg7tiwmDVA85yVaFzwLi4Kor -eDUqTWSDU41tTS1mQUgakTpIwUAHYXB0zrfSyMJPOvZlWdjj302sZi8sHCX9UdQK -9ByHh+KkyIvFGv1s80MesSECgYEApkrxLkeiiWeVWxCpGuJfKngi98lxmAm8rAe9 -0m77bjwkxQNNLYY/r1VCfoWX3HPHvFB1f7bCBTF3i4TODtTIU7l/fdc04V4nzygi -fWDiEjdjD8VdJCIyrOtB+KzuO8yi58pSl0IuFpMEQdq6F8B8rslkUc98zejgwdbM -Tvmw2M0CgYAMiBOJdZV11MAuvNjdl9VaGkuaqrVZeZLHwEezacwiV/kH/sym0yHM -2EJR6ZGQ8nRHT5noiCYII8kcc+1aP1bWVeCJ2+KBQJLwDtnMpYPsxZSQReO5GkU1 -DSNeKI7kaR3v2gk/IhFloAzUwfcvu93m2oST/+USG4aGYvOrj4mvVA== ------END RSA PRIVATE KEY----- diff --git a/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-public.pem.key b/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-public.pem.key deleted file mode 100644 index 76625c4..0000000 --- a/src/main/resources/certs/54e5d2549e672108375364398317635c85a2a4082c90ff9378d02a118bd41800-public.pem.key +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2FnHXAJFOPaxou7zGqRR -hwxBlgaJX2eTP5Mm0idm7eEeAyw4IfzYHHmBluAUqUi3xTw7ixjFoitaAN5j8x8T -mQg9rJ++NStSGAiBcwb8Du18yx4nU54JBNJ2IdxBjZbxHRhN4RK0gd4i6dEY3ACE -j8UZ6WtSPj3/b0uB0ec7Ac637Ji9hYpal6PPvUk0ygEbnL+0BhtWJ92Sd42OYkD4 -njVAt/pFvPG+NEE04mPJHDDkR3OD60buWEz2Sw2Hkt1Wl5WIahZ3zyAaTBmWFnL4 -9j3QD3pr3TodMjEAFEqpt+x7A9yoEsl2UOOthmctDgRVsSdh+6fYQFb/T3r1s8Ov -uQIDAQAB ------END PUBLIC KEY----- diff --git a/src/main/resources/certs/root.pem b/src/main/resources/certs/root.pem deleted file mode 100644 index 1aab05d..0000000 --- a/src/main/resources/certs/root.pem +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj -ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM -9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw -IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 -VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L -93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm -jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA -A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI -U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs -N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv -o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU -5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy -rqXRfboQnoZsG4q5WTP468SQvvG5 ------END CERTIFICATE----- \ No newline at end of file