终端管理系统主程序完整性自检

This commit is contained in:
cheney
2026-05-15 14:55:04 +08:00
parent cd690bd2d9
commit a177277f04
2 changed files with 212 additions and 20 deletions
@@ -177,19 +177,19 @@ public class SelfCheckServiceImpl implements SelfCheckService {
private boolean doVerifyTmsIntegrity() {
try {
System.out.println("=== 验证系统文件MAC校验值 ===");
log.info("=== 验证系统文件MAC校验值 ===");
PublicKey publicKey = SM2Util.loadPublicKey(MAC_PUBLIC_KEY_PATH);
byte[] savedSignature = SM3Util.readFileBytes(MAC_SIGN_FILE);
String savedMacList = SM3Util.readFile(MAC_LIST_FILE);
boolean macListSignatureValid = SM2Util.verify(savedMacList.getBytes(StandardCharsets.UTF_8), savedSignature, publicKey);
System.out.println("MAC列表签名验证: " + (macListSignatureValid ? "通过" : "失败"));
log.info("MAC列表签名验证: " + (macListSignatureValid ? "通过" : "失败"));
if (!macListSignatureValid) {
System.out.println("错误: mac.list 签名验证失败,可能被篡改!");
System.out.println("\n=== 验证结果 ===");
System.out.println("完整性验证: false");
log.info("错误: mac.list 签名验证失败,可能被篡改!");
log.info("\n=== 验证结果 ===");
log.info("完整性验证: false");
return false;
}
@@ -222,24 +222,24 @@ public class SelfCheckServiceImpl implements SelfCheckService {
String currentHash = currentSm3Map.get(filePath);
if (currentHash == null) {
System.out.println("文件缺失: " + filePath);
log.info("文件缺失: " + filePath);
allMatch = false;
} else if (!savedHash.equals(currentHash)) {
System.out.println("文件被修改: " + filePath + " (期望: " + savedHash + ", 实际: " + currentHash + ")");
log.info("文件被修改: " + filePath + " (期望: " + savedHash + ", 实际: " + currentHash + ")");
allMatch = false;
}
}
for (String filePath : currentSm3Map.keySet()) {
if (!savedSm3Map.containsKey(filePath)) {
System.out.println("新增文件: " + filePath);
log.info("新增文件: " + filePath);
allMatch = false;
}
}
System.out.println();
System.out.println("=== 验证结果 ===");
System.out.println("完整性验证: " + allMatch);
log.info("");
log.info("=== 验证结果 ===");
log.info("完整性验证: " + allMatch);
return allMatch;
} catch (Exception e) {
log.error("[ERROR] {} - {}", CHECK_TMS_INTEGRITY, e.getMessage());
@@ -248,6 +248,68 @@ public class SelfCheckServiceImpl implements SelfCheckService {
}
private boolean doVerifyStandardTransceiverIntegrity() {
return false;
try {
log.info("=== 验证CMEP文件MAC校验值 ===");
PublicKey publicKey = SM2Util.loadPublicKey(MAC_PUBLIC_KEY_PATH);
byte[] savedSignature = SM3Util.readFileBytes(CMEP_MAC_SIGN_FILE);
String savedMacList = SM3Util.readFile(CMEP_MAC_LIST_FILE);
boolean macListSignatureValid = SM2Util.verify(savedMacList.getBytes(StandardCharsets.UTF_8), savedSignature, publicKey);
log.info("CMEP MAC列表签名验证: " + (macListSignatureValid ? "通过" : "失败"));
if (!macListSignatureValid) {
log.info("错误: cmep.mac.list 签名验证失败,可能被篡改!");
log.info("\n=== 验证结果 ===");
log.info("完整性验证: false");
return false;
}
Map<String, String> savedSm3Map = SM3Util.readSM3File(CMEP_MAC_LIST_FILE);
Map<String, String> currentSm3Map = new java.util.LinkedHashMap<>();
for (String target : CMEP_TARGETS) {
File file = new File(target);
if (!file.exists()) {
continue;
}
if (file.isFile()) {
String sm3Value = SM3Util.sm3FileHex(target);
currentSm3Map.put(target, sm3Value);
}
}
boolean allMatch = true;
for (Map.Entry<String, String> entry : savedSm3Map.entrySet()) {
String filePath = entry.getKey();
String savedHash = entry.getValue();
String currentHash = currentSm3Map.get(filePath);
if (currentHash == null) {
log.info("文件缺失: " + filePath);
allMatch = false;
} else if (!savedHash.equals(currentHash)) {
log.info("文件被修改: " + filePath + " (期望: " + savedHash + ", 实际: " + currentHash + ")");
allMatch = false;
}
}
for (String filePath : currentSm3Map.keySet()) {
if (!savedSm3Map.containsKey(filePath)) {
log.info("新增文件: " + filePath);
allMatch = false;
}
}
log.info("");
log.info("=== 验证结果 ===");
log.info("完整性验证: " + allMatch);
return allMatch;
} catch (Exception e) {
log.error("[ERROR] {} - {}", CHECK_STANDARD_TRANSCEIVER, e.getMessage());
return false;
}
}
}