Merge remote-tracking branch 'origin/chsm-v1.0' into chsm-v1.0

This commit is contained in:
Cheney 2024-11-14 15:31:33 +08:00
commit 5ce75ed4ce
15 changed files with 63 additions and 24 deletions

View File

@ -45,6 +45,10 @@
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId> <artifactId>commons-pool2</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency> <dependency>
<groupId>net.java.dev.jna</groupId> <groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId> <artifactId>jna</artifactId>

View File

@ -1,4 +1,4 @@
package com.sunyard.chsm.dto; package com.sunyard.chsm.model.dto;
import com.sunyard.chsm.model.PageQuery; import com.sunyard.chsm.model.PageQuery;
import lombok.Data; import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.sunyard.chsm.dto; package com.sunyard.chsm.model.dto;
import com.sunyard.chsm.model.PageQuery; import com.sunyard.chsm.model.PageQuery;
import com.sunyard.chsm.model.Subject; import com.sunyard.chsm.model.Subject;

View File

@ -1,7 +1,7 @@
package com.sunyard.chsm.service; package com.sunyard.chsm.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sunyard.chsm.dto.CertDTO; import com.sunyard.chsm.model.dto.CertDTO;
/** /**
* @author liulu * @author liulu
@ -12,4 +12,6 @@ public interface AppCertService {
Page<CertDTO.ACView> selectPageList(CertDTO.Query query); Page<CertDTO.ACView> selectPageList(CertDTO.Query query);
void importCert(CertDTO.ImportCert importCert); void importCert(CertDTO.ImportCert importCert);
void delete(Long id);
} }

View File

@ -1,7 +1,7 @@
package com.sunyard.chsm.service; package com.sunyard.chsm.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sunyard.chsm.dto.CertDTO; import com.sunyard.chsm.model.dto.CertDTO;
/** /**
* @author liulu * @author liulu

View File

@ -1,7 +1,7 @@
package com.sunyard.chsm.service; package com.sunyard.chsm.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sunyard.chsm.dto.KeyInfoDTO; import com.sunyard.chsm.model.dto.KeyInfoDTO;
import java.io.InputStream; import java.io.InputStream;
import java.util.List; import java.util.List;

View File

@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sunyard.chsm.dto.CertDTO;
import com.sunyard.chsm.enums.KeyCategory; import com.sunyard.chsm.enums.KeyCategory;
import com.sunyard.chsm.enums.KeyStatus; import com.sunyard.chsm.enums.KeyStatus;
import com.sunyard.chsm.enums.KeyUsage; import com.sunyard.chsm.enums.KeyUsage;
@ -12,6 +11,7 @@ import com.sunyard.chsm.mapper.AppCertMapper;
import com.sunyard.chsm.mapper.ApplicationMapper; import com.sunyard.chsm.mapper.ApplicationMapper;
import com.sunyard.chsm.mapper.KeyInfoMapper; import com.sunyard.chsm.mapper.KeyInfoMapper;
import com.sunyard.chsm.mapper.SpKeyRecordMapper; import com.sunyard.chsm.mapper.SpKeyRecordMapper;
import com.sunyard.chsm.model.dto.CertDTO;
import com.sunyard.chsm.model.entity.AppCert; import com.sunyard.chsm.model.entity.AppCert;
import com.sunyard.chsm.model.entity.Application; import com.sunyard.chsm.model.entity.Application;
import com.sunyard.chsm.model.entity.KeyInfo; import com.sunyard.chsm.model.entity.KeyInfo;
@ -23,6 +23,7 @@ import com.sunyard.chsm.utils.gm.BCSM2Utils;
import com.sunyard.chsm.utils.gm.BCSM4Utils; import com.sunyard.chsm.utils.gm.BCSM4Utils;
import com.sunyard.chsm.utils.gm.cert.BCSM2CertUtils; import com.sunyard.chsm.utils.gm.cert.BCSM2CertUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.tuple.Pair;
import org.bouncycastle.asn1.ASN1BitString; import org.bouncycastle.asn1.ASN1BitString;
import org.bouncycastle.asn1.ASN1Integer; import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.ASN1ObjectIdentifier; import org.bouncycastle.asn1.ASN1ObjectIdentifier;
@ -36,7 +37,6 @@ import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;
import org.bouncycastle.util.BigIntegers; import org.bouncycastle.util.BigIntegers;
import org.bouncycastle.util.encoders.Hex; import org.bouncycastle.util.encoders.Hex;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.data.util.Pair;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert; import org.springframework.util.Assert;
@ -173,6 +173,8 @@ public class AppCertServiceImpl implements AppCertService {
} catch (Exception ex) { } catch (Exception ex) {
throw new IllegalArgumentException("证书内容格式错误,无法解析"); throw new IllegalArgumentException("证书内容格式错误,无法解析");
} }
Assert.isTrue(Objects.equals(signCert.getSubjectX500Principal().getName(), encCert.getSubjectX500Principal().getName()),
"证书主题不一致");
PublicKey signPk = signCert.getPublicKey(); PublicKey signPk = signCert.getPublicKey();
String signPkHex = BCECUtils.getHexPubKey((BCECPublicKey) signPk); String signPkHex = BCECUtils.getHexPubKey((BCECPublicKey) signPk);
String encPkHex = BCECUtils.getHexPubKey((BCECPublicKey) encCert.getPublicKey()); String encPkHex = BCECUtils.getHexPubKey((BCECPublicKey) encCert.getPublicKey());
@ -192,7 +194,7 @@ public class AppCertServiceImpl implements AppCertService {
log.error("解密加密密钥信封异常", ex); log.error("解密加密密钥信封异常", ex);
throw new IllegalArgumentException("加密密钥信封格式错误,解密失败"); throw new IllegalArgumentException("加密密钥信封格式错误,解密失败");
} }
Assert.isTrue(Objects.equals(encPkHex, keys.getFirst()), "加密证书和私钥不匹配"); Assert.isTrue(Objects.equals(encPkHex, keys.getLeft()), "加密证书和私钥不匹配");
AppCert exist = appCertMapper.selectBySN(signCert.getSerialNumber().toString()); AppCert exist = appCertMapper.selectBySN(signCert.getSerialNumber().toString());
Assert.isNull(exist, "签名证书已经存在"); Assert.isNull(exist, "签名证书已经存在");
@ -207,8 +209,8 @@ public class AppCertServiceImpl implements AppCertService {
importCert.setCertType(KeyUsage.ENCRYPT_DECRYPT.getCode()); importCert.setCertType(KeyUsage.ENCRYPT_DECRYPT.getCode());
importCert.setCertText(importCert.getEncCertText()); importCert.setCertText(importCert.getEncCertText());
AppCert enc = genCert(encCert, keyInfo.getApplicationId(), record, importCert); AppCert enc = genCert(encCert, keyInfo.getApplicationId(), record, importCert);
enc.setPubKey(keys.getFirst()); enc.setPubKey(keys.getLeft());
byte[] encPri = sdfApiService.encryptByTMK(keys.getSecond()); byte[] encPri = sdfApiService.encryptByTMK(keys.getRight());
enc.setEncPriKey(Hex.toHexString(encPri)); enc.setEncPriKey(Hex.toHexString(encPri));
appCertMapper.insert(enc); appCertMapper.insert(enc);
@ -274,4 +276,25 @@ public class AppCertServiceImpl implements AppCertService {
return Pair.of(Hex.toHexString(xy), pd); return Pair.of(Hex.toHexString(xy), pd);
} }
@Override
public void delete(Long id) {
AppCert appCert = appCertMapper.selectById(id);
Assert.notNull(appCert, "证书不存在");
if (appCert.getSingle()) {
appCertMapper.deleteById(id);
return;
}
List<AppCert> appCerts = appCertMapper.selectList(
new LambdaQueryWrapper<AppCert>()
.eq(AppCert::getKeyId, appCert.getKeyId())
.eq(AppCert::getSubject, appCert.getSubject())
);
appCertMapper.deleteBatchIds(appCerts.stream().map(AppCert::getId).collect(Collectors.toList()));
}
} }

View File

@ -4,8 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sunyard.chsm.dto.CertDTO;
import com.sunyard.chsm.mapper.CaCertMapper; import com.sunyard.chsm.mapper.CaCertMapper;
import com.sunyard.chsm.model.dto.CertDTO;
import com.sunyard.chsm.model.entity.CaCert; import com.sunyard.chsm.model.entity.CaCert;
import com.sunyard.chsm.service.CaCertService; import com.sunyard.chsm.service.CaCertService;
import com.sunyard.chsm.utils.gm.BCECUtils; import com.sunyard.chsm.utils.gm.BCECUtils;

View File

@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sunyard.chsm.dto.KeyInfoDTO;
import com.sunyard.chsm.enums.EnableStatus; import com.sunyard.chsm.enums.EnableStatus;
import com.sunyard.chsm.enums.KeyCategory; import com.sunyard.chsm.enums.KeyCategory;
import com.sunyard.chsm.enums.KeyStatus; import com.sunyard.chsm.enums.KeyStatus;
@ -15,6 +14,7 @@ import com.sunyard.chsm.mapper.KeyCsrMapper;
import com.sunyard.chsm.mapper.KeyInfoMapper; import com.sunyard.chsm.mapper.KeyInfoMapper;
import com.sunyard.chsm.mapper.KeyTemplateMapper; import com.sunyard.chsm.mapper.KeyTemplateMapper;
import com.sunyard.chsm.mapper.SpKeyRecordMapper; import com.sunyard.chsm.mapper.SpKeyRecordMapper;
import com.sunyard.chsm.model.dto.KeyInfoDTO;
import com.sunyard.chsm.model.entity.Application; import com.sunyard.chsm.model.entity.Application;
import com.sunyard.chsm.model.entity.KeyCsr; import com.sunyard.chsm.model.entity.KeyCsr;
import com.sunyard.chsm.model.entity.KeyInfo; import com.sunyard.chsm.model.entity.KeyInfo;
@ -26,7 +26,6 @@ import com.sunyard.chsm.service.KeyInfoService;
import com.sunyard.chsm.utils.JsonUtils; import com.sunyard.chsm.utils.JsonUtils;
import com.sunyard.chsm.utils.gm.BCECUtils; import com.sunyard.chsm.utils.gm.BCECUtils;
import com.sunyard.chsm.utils.gm.cert.CommonCertUtils; import com.sunyard.chsm.utils.gm.cert.CommonCertUtils;
import com.sunyard.ssp.common.exception.SspwebException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.bouncycastle.asn1.x500.X500Name; import org.bouncycastle.asn1.x500.X500Name;
import org.bouncycastle.crypto.params.ECDomainParameters; import org.bouncycastle.crypto.params.ECDomainParameters;
@ -330,7 +329,7 @@ public class KeyInfoServiceImpl implements KeyInfoService {
try { try {
if ((line = reader.readLine()) == null) break; if ((line = reader.readLine()) == null) break;
} catch (IOException e) { } catch (IOException e) {
throw new SspwebException("文件读取异常"); throw new IllegalArgumentException("文件读取异常");
} }
if (ObjectUtils.isEmpty(line)) { if (ObjectUtils.isEmpty(line)) {
continue; continue;
@ -358,7 +357,7 @@ public class KeyInfoServiceImpl implements KeyInfoService {
} }
} }
} catch (IOException e) { } catch (IOException e) {
throw new SspwebException(e.getMessage()); throw new IllegalArgumentException(e.getMessage());
} }
return String.format("恢复完成,共%d条数据,跳过已经存在的密钥%d条,恢复成功%d条,解析失败%d条", count, exd, suc, err); return String.format("恢复完成,共%d条数据,跳过已经存在的密钥%d条,恢复成功%d条,解析失败%d条", count, exd, suc, err);
} }

View File

@ -71,10 +71,6 @@
<artifactId>hutool-core</artifactId> <artifactId>hutool-core</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency> <dependency>
<groupId>commons-codec</groupId> <groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId> <artifactId>commons-codec</artifactId>

View File

@ -1,10 +1,13 @@
package com.sunyard.chsm.controller; package com.sunyard.chsm.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sunyard.chsm.dto.CertDTO; import com.sunyard.chsm.constant.AuditLogConst;
import com.sunyard.chsm.model.R; import com.sunyard.chsm.model.R;
import com.sunyard.chsm.model.dto.CertDTO;
import com.sunyard.chsm.service.AppCertService; import com.sunyard.chsm.service.AppCertService;
import com.sunyard.ssp.common.annotation.AuditControllerLog;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@ -53,5 +56,17 @@ public class AppCertController {
appCertService.importCert(importCert); appCertService.importCert(importCert);
} }
/**
* 删除证书
*
* @param id id
* @return void
*/
@DeleteMapping
@AuditControllerLog(description = "删除证书", operateType = AuditLogConst.DELETE)
public R<Void> delete(Long id) {
appCertService.delete(id);
return R.ok();
}
} }

View File

@ -2,8 +2,8 @@ package com.sunyard.chsm.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sunyard.chsm.constant.AuditLogConst; import com.sunyard.chsm.constant.AuditLogConst;
import com.sunyard.chsm.dto.CertDTO;
import com.sunyard.chsm.model.R; import com.sunyard.chsm.model.R;
import com.sunyard.chsm.model.dto.CertDTO;
import com.sunyard.chsm.service.CaCertService; import com.sunyard.chsm.service.CaCertService;
import com.sunyard.ssp.common.annotation.AuditControllerLog; import com.sunyard.ssp.common.annotation.AuditControllerLog;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@ -1,9 +1,9 @@
package com.sunyard.chsm.controller; package com.sunyard.chsm.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sunyard.chsm.dto.KeyInfoDTO;
import com.sunyard.chsm.enums.KeyCategory; import com.sunyard.chsm.enums.KeyCategory;
import com.sunyard.chsm.model.R; import com.sunyard.chsm.model.R;
import com.sunyard.chsm.model.dto.KeyInfoDTO;
import com.sunyard.chsm.service.KeyInfoService; import com.sunyard.chsm.service.KeyInfoService;
import com.sunyard.chsm.utils.DateFormat; import com.sunyard.chsm.utils.DateFormat;
import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.ByteArrayResource;

View File

@ -1,10 +1,10 @@
package com.sunyard.chsm.controller; package com.sunyard.chsm.controller;
import com.sunyard.chsm.constant.AuditLogConst; import com.sunyard.chsm.constant.AuditLogConst;
import com.sunyard.chsm.dto.KeyInfoDTO;
import com.sunyard.chsm.enums.KeyStatus; import com.sunyard.chsm.enums.KeyStatus;
import com.sunyard.chsm.model.Option; import com.sunyard.chsm.model.Option;
import com.sunyard.chsm.model.R; import com.sunyard.chsm.model.R;
import com.sunyard.chsm.model.dto.KeyInfoDTO;
import com.sunyard.chsm.service.KeyInfoService; import com.sunyard.chsm.service.KeyInfoService;
import com.sunyard.ssp.common.annotation.AuditControllerLog; import com.sunyard.ssp.common.annotation.AuditControllerLog;
import com.sunyard.ssp.common.exception.SspwebException; import com.sunyard.ssp.common.exception.SspwebException;

View File

@ -1,9 +1,9 @@
package com.sunyard.chsm.controller; package com.sunyard.chsm.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sunyard.chsm.dto.KeyInfoDTO;
import com.sunyard.chsm.enums.KeyCategory; import com.sunyard.chsm.enums.KeyCategory;
import com.sunyard.chsm.model.R; import com.sunyard.chsm.model.R;
import com.sunyard.chsm.model.dto.KeyInfoDTO;
import com.sunyard.chsm.service.KeyInfoService; import com.sunyard.chsm.service.KeyInfoService;
import com.sunyard.chsm.utils.DateFormat; import com.sunyard.chsm.utils.DateFormat;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;