sensorconfig encryption

This commit is contained in:
insanity 2018-07-02 15:33:27 +09:00
parent e5e76f7e7a
commit 8a188b3873
3 changed files with 97 additions and 25 deletions

View File

@ -28,7 +28,6 @@ import com.loafle.overflow.service.central.probe.ProbeService;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import inet.ipaddr.IPAddress; import inet.ipaddr.IPAddress;
@ -152,15 +151,12 @@ public class CentralNoAuthProbeService implements NoAuthProbeService {
throw new OverflowException("InfraHostMachine is not valid"); throw new OverflowException("InfraHostMachine is not valid");
} }
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String encryptKey = passwordEncoder.encode(UUID.randomUUID().toString());
ApiKey apiKey = apiKeyService.readByApiKey(noAuthProbe.getApiKey()); ApiKey apiKey = apiKeyService.readByApiKey(noAuthProbe.getApiKey());
String memberEmail = SessionMetadata.getTargetID(); String memberEmail = SessionMetadata.getTargetID();
DomainMember domainMember = domainMemberService.readByMemberEmail(memberEmail); DomainMember domainMember = domainMemberService.readByMemberEmail(memberEmail);
Probe probe = new Probe(); Probe probe = new Probe();
probe.setEncryptionKey(encryptKey); probe.setEncryptionKey(UUID.randomUUID().toString() + UUID.randomUUID().toString());
probe.setProbeKey(GenerateKey.getKey()); probe.setProbeKey(GenerateKey.getKey());
probe.setDomain(new Domain(apiKey.getDomain().getId())); probe.setDomain(new Domain(apiKey.getDomain().getId()));
probe.setAuthorizeMember(new Member(domainMember.getMember().getId())); probe.setAuthorizeMember(new Member(domainMember.getMember().getId()));

View File

@ -1,20 +1,33 @@
package com.loafle.overflow.central.module.sensor.service; package com.loafle.overflow.central.module.sensor.service;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStreamReader;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Base64;
import java.util.List; import java.util.List;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.loafle.overflow.central.commons.service.MessagePublisher;
import com.loafle.overflow.core.exception.OverflowException; import com.loafle.overflow.core.exception.OverflowException;
import com.loafle.overflow.model.infra.Infra; import com.loafle.overflow.model.infra.Infra;
import com.loafle.overflow.model.infra.InfraHost; import com.loafle.overflow.model.infra.InfraHost;
import com.loafle.overflow.model.infra.InfraHostIP;
import com.loafle.overflow.model.infra.InfraHostPort; import com.loafle.overflow.model.infra.InfraHostPort;
import com.loafle.overflow.model.infra.InfraService; import com.loafle.overflow.model.infra.InfraService;
import com.loafle.overflow.model.infra.InfraZone;
import com.loafle.overflow.model.meta.MetaCollectionItem; import com.loafle.overflow.model.meta.MetaCollectionItem;
import com.loafle.overflow.model.meta.MetaCollectionItemMapping; import com.loafle.overflow.model.meta.MetaCollectionItemMapping;
import com.loafle.overflow.model.meta.MetaCryptoType; import com.loafle.overflow.model.meta.MetaCryptoType;
import com.loafle.overflow.model.meta.MetaInfraType; import com.loafle.overflow.model.meta.MetaInfraType;
import com.loafle.overflow.model.probe.Probe;
import com.loafle.overflow.model.sensor.Sensor; import com.loafle.overflow.model.sensor.Sensor;
import com.loafle.overflow.model.sensor.SensorItem; import com.loafle.overflow.model.sensor.SensorItem;
import com.loafle.overflow.model.sensorconfig.SensorConfig; import com.loafle.overflow.model.sensorconfig.SensorConfig;
@ -34,6 +47,10 @@ public class CentralSensorConfigService {
MetaCollectionItemMappingService metaCollectionItemMappingService; MetaCollectionItemMappingService metaCollectionItemMappingService;
@Autowired @Autowired
CentralSensorItemService sensorItemService; CentralSensorItemService sensorItemService;
@Autowired
ObjectMapper objectMapper;
@Autowired
private MessagePublisher messagePublisher;
@Transactional @Transactional
public SensorConfig regist(Sensor sensor) throws OverflowException { public SensorConfig regist(Sensor sensor) throws OverflowException {
@ -42,15 +59,68 @@ public class CentralSensorConfigService {
} }
SensorConfig sensorConfig = new SensorConfig(); SensorConfig sensorConfig = new SensorConfig();
sensorConfig.setSensorID(sensor.getId()); sensorConfig.setSensorID(sensor.getId());
sensorConfig.setCrawler(this.configCrawler(sensorConfig, sensor)); sensorConfig.setCrawler(this.configCrawler(sensor));
sensorConfig.setConnection(this.configConnection(sensorConfig, sensor)); sensorConfig.setConnection(this.configConnection(sensor));
sensorConfig.setSchedule(this.configSchedule(sensorConfig, sensor)); sensorConfig.setSchedule(this.configSchedule(sensor));
sensorConfig.setItems(this.configItems(sensorConfig, sensor)); sensorConfig.setItems(this.configItems(sensor));
Probe probe = sensor.getTarget().getInfra().getProbe();
String encryptedSensorConfigBase64 = this.toEncryptString(sensorConfig, probe.getEncryptionKey());
this.messagePublisher.publishToProbe(probe.getProbeKey(), "SensorService.AddSensor", encryptedSensorConfigBase64);
return sensorConfig; return sensorConfig;
} }
private SensorConfigCrawler configCrawler(SensorConfig config, Sensor sensor) throws OverflowException { private String toEncryptString(SensorConfig sensorConfig, String encryptKey) throws OverflowException {
try {
String sensorConfigJsonStr = this.objectMapper.writeValueAsString(sensorConfig);
// gzip
ByteArrayOutputStream obj = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(obj);
gzip.write(sensorConfigJsonStr.getBytes("UTF-8"));
gzip.flush();
gzip.close();
byte[] compressedByte = obj.toByteArray();
// DES encryption
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
DESKeySpec desKeySpec = new DESKeySpec(encryptKey.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, keyFactory.generateSecret(desKeySpec));
byte[] outputBytes = cipher.doFinal(compressedByte);
// Base64
return Base64.getEncoder().encodeToString(outputBytes);
} catch (Exception e) {
throw new OverflowException("", e);
}
}
/*
* private String testDecrypt(String encryptKey, String encrypted) throws
* OverflowException { try { byte[] inputBytes =
* Base64.getDecoder().decode(encrypted.getBytes());
*
* Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); SecretKeyFactory
* keyFactory = SecretKeyFactory.getInstance("DES"); DESKeySpec desKeySpec = new
* DESKeySpec(encryptKey.getBytes()); cipher.init(Cipher.DECRYPT_MODE,
* keyFactory.generateSecret(desKeySpec));
*
* byte[] outputBytes = cipher.doFinal(inputBytes);
*
* GZIPInputStream gis = new GZIPInputStream(new
* ByteArrayInputStream(outputBytes)); BufferedReader bf = new
* BufferedReader(new InputStreamReader(gis, "UTF-8")); String result = "";
* String line; while ((line = bf.readLine()) != null) { result += line; }
*
* return result;
*
* } catch (Exception e) { throw new OverflowException("", e); } }
*/
private SensorConfigCrawler configCrawler(Sensor sensor) throws OverflowException {
if (null == sensor.getMetaCrawlerMapping() || null == sensor.getMetaCrawlerMapping().getMetaCrawler() if (null == sensor.getMetaCrawlerMapping() || null == sensor.getMetaCrawlerMapping().getMetaCrawler()
|| null == sensor.getMetaCrawlerMapping().getMetaCrawlerContainer()) { || null == sensor.getMetaCrawlerMapping().getMetaCrawlerContainer()) {
throw new OverflowException(String.format("ID[%s] of Sensor is not valid", sensor.getId())); throw new OverflowException(String.format("ID[%s] of Sensor is not valid", sensor.getId()));
@ -62,32 +132,40 @@ public class CentralSensorConfigService {
return sensorConfigCrawler; return sensorConfigCrawler;
} }
private SensorConfigConnection configConnection(SensorConfig config, Sensor sensor) throws OverflowException { private SensorConfigConnection configConnection(Sensor sensor) throws OverflowException {
if (null == sensor.getTarget() || null == sensor.getTarget().getInfra() if (null == sensor.getTarget() || null == sensor.getTarget().getInfra()
|| null == sensor.getTarget().getInfra().getMetaInfraType()) { || null == sensor.getTarget().getInfra().getMetaInfraType()) {
throw new OverflowException(String.format("ID[%s] of Sensor is not valid", sensor.getId())); throw new OverflowException(String.format("ID[%s] of Sensor is not valid", sensor.getId()));
} }
Infra infra = sensor.getTarget().getInfra(); Infra infra = sensor.getTarget().getInfra();
MetaInfraType metaInfraType = infra.getMetaInfraType(); MetaInfraType metaInfraType = infra.getMetaInfraType();
InfraHostIP infraHostIP = null; String InfraHostIPAddress = null;
; String metaIPTypeKey = null;
InfraHostPort infraHostPort = null; InfraHostPort infraHostPort = null;
MetaCryptoType metaCryptoType = null; MetaCryptoType metaCryptoType = null;
;
if (metaInfraType.getKey().equals("HOST")) { if (metaInfraType.getKey().equals("HOST")) {
infraHostIP = ((InfraHost) infra).getInfraHostIPs().get(0); InfraHost infraHost = (InfraHost) infra;
metaIPTypeKey = infraHost.getInfraHostIPs().get(0).getMetaIPType().getKey();
InfraHostIPAddress = infraHost.getInfraHostIPs().get(0).getAddress();
} else if (metaInfraType.getKey().equals("SERVICE")) { } else if (metaInfraType.getKey().equals("SERVICE")) {
infraHostIP = ((InfraService) infra).getInfraHostPort().getInfraHostIP(); InfraService infraService = (InfraService) infra;
infraHostPort = ((InfraService) infra).getInfraHostPort(); InfraHostIPAddress = infraService.getInfraHostPort().getInfraHostIP().getAddress();
metaCryptoType = ((InfraService) infra).getMetaCryptoType(); infraHostPort = infraService.getInfraHostPort();
metaCryptoType = infraService.getMetaCryptoType();
} else if (metaInfraType.getKey().equals("ZONE")) {
InfraZone infraZone = (InfraZone) infra;
InfraHostIPAddress = infraZone.getAddress();
metaIPTypeKey = infraZone.getMetaIPType().getKey();
} else { } else {
throw new OverflowException(String.format("ID[%s] of Sensor is not valid", sensor.getId())); throw new OverflowException(String.format("ID[%s] of Sensor is not valid", sensor.getId()));
} }
SensorConfigConnection sensorConfigConnection = new SensorConfigConnection(); SensorConfigConnection sensorConfigConnection = new SensorConfigConnection();
sensorConfigConnection.setMetaIPTypeKey(infraHostIP.getMetaIPType().getKey()); sensorConfigConnection.setMetaIPTypeKey(metaIPTypeKey);
sensorConfigConnection.setIp(infraHostIP.getAddress()); sensorConfigConnection.setIp(InfraHostIPAddress);
if (null != infraHostPort) { if (null != infraHostPort) {
sensorConfigConnection.setMetaPortTypeKey(infraHostPort.getMetaPortType().getKey()); sensorConfigConnection.setMetaPortTypeKey(infraHostPort.getMetaPortType().getKey());
sensorConfigConnection.setPort(infraHostPort.getPort()); sensorConfigConnection.setPort(infraHostPort.getPort());
@ -99,7 +177,7 @@ public class CentralSensorConfigService {
return sensorConfigConnection; return sensorConfigConnection;
} }
private SensorConfigSchedule configSchedule(SensorConfig config, Sensor sensor) throws OverflowException { private SensorConfigSchedule configSchedule(Sensor sensor) throws OverflowException {
Integer interval = null != sensor.getInterval() ? sensor.getInterval() Integer interval = null != sensor.getInterval() ? sensor.getInterval()
: sensor.getMetaCrawlerMapping().getDefaultInterval(); : sensor.getMetaCrawlerMapping().getDefaultInterval();
SensorConfigSchedule sensorConfigSchedule = new SensorConfigSchedule(); SensorConfigSchedule sensorConfigSchedule = new SensorConfigSchedule();
@ -107,7 +185,7 @@ public class CentralSensorConfigService {
return sensorConfigSchedule; return sensorConfigSchedule;
} }
private SensorConfigItems configItems(SensorConfig config, Sensor sensor) throws OverflowException { private SensorConfigItems configItems(Sensor sensor) throws OverflowException {
List<SensorItem> sensorItems = this.sensorItemService.readAllBySensorID(sensor.getId()); List<SensorItem> sensorItems = this.sensorItemService.readAllBySensorID(sensor.getId());
if (null == sensorItems || sensorItems.size() == 0) { if (null == sensorItems || sensorItems.size() == 0) {
throw new OverflowException(String.format("ID[%s] of Sensor has no SensorItem", sensor.getId())); throw new OverflowException(String.format("ID[%s] of Sensor has no SensorItem", sensor.getId()));

View File

@ -44,7 +44,6 @@ public class SensorServiceTest {
InfraService infraService; InfraService infraService;
@Test @Test
@Ignore
public void registDefault() throws Exception { public void registDefault() throws Exception {
Long tempInfraID = Long.valueOf(28); // ssh Long tempInfraID = Long.valueOf(28); // ssh
Long tempProbeID = Long.valueOf(3); Long tempProbeID = Long.valueOf(3);
@ -58,7 +57,6 @@ public class SensorServiceTest {
} }
@Test @Test
@Ignore
public void regist() throws Exception { public void regist() throws Exception {
Target target = this.targetService.read(Long.valueOf(1)); Target target = this.targetService.read(Long.valueOf(1));