From 7777115c17c47246651998b312fd45a73c577a49 Mon Sep 17 00:00:00 2001
From: M0914 <2625053283@qq.com>
Date: Fri, 12 Sep 2025 10:14:59 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E9=99=A4TEST=E4=BE=9D=E8=B5=96?=
=?UTF-8?q?=EF=BC=8C=E8=AF=81=E4=B9=A6=E7=94=9F=E6=88=90=E6=97=B6=E9=97=B4?=
=?UTF-8?q?=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 14 ----
.../context/CertificateContextHolder.java | 70 +++++-------------
.../resources/external/agent/ja-netfilter.zip | Bin 85423 -> 84947 bytes
.../QiuMoJetbrainsHelpApplicationTests.java | 13 ----
4 files changed, 20 insertions(+), 77 deletions(-)
delete mode 100644 src/test/java/com/qiumo/help/QiuMoJetbrainsHelpApplicationTests.java
diff --git a/pom.xml b/pom.xml
index 10bd13a..33abd0b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,13 +95,6 @@
jansi
2.4.0
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
@@ -142,13 +135,6 @@
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${maven-surefire-plugin.version}
-
diff --git a/src/main/java/com/qiumo/help/context/CertificateContextHolder.java b/src/main/java/com/qiumo/help/context/CertificateContextHolder.java
index 83d9e0a..a265405 100644
--- a/src/main/java/com/qiumo/help/context/CertificateContextHolder.java
+++ b/src/main/java/com/qiumo/help/context/CertificateContextHolder.java
@@ -95,33 +95,6 @@ public class CertificateContextHolder {
/** 服务器子证书文件路径 */
private static final String SERVER_CHILD_CET_FILE_NAME = "external/certificate/server-child-ca.crt";
- /** 证书有效期(年) */
- private static final int CERTIFICATE_VALIDITY_YEARS = 100;
-
- /** RSA签名算法 */
- private static final String SIGNATURE_ALGORITHM = "SHA256withRSA";
-
- /** BouncyCastle提供者标识 */
- private static final String BC_PROVIDER = "BC";
-
- /** RSA加密算法标识 */
- private static final String RSA_ALGORITHM = "RSA";
-
- /** 授权码签名CA的DN */
- private static final String CODE_CA_DN = "CN=JetProfile CA";
-
- /** 许可证服务器CA的DN */
- private static final String LICENSE_SERVER_CA_DN = "CN=License Servers CA";
-
- /** 应用程序主体DN */
- private static final String APP_SUBJECT_DN = "CN=QiuMo-Jetbrains-Help";
-
- /** 许可证服务器域名 */
- private static final String LICENSE_SERVER_DOMAIN = "qiumo.lsrv.jetbrains.com";
-
- /** 许可证服务器主体DN */
- private static final String LICENSE_SERVER_SUBJECT_DN = "CN=" + LICENSE_SERVER_DOMAIN;
-
// ==================== 静态文件对象 ====================
/** 授权码根密钥文件对象 */
@@ -335,7 +308,7 @@ public class CertificateContextHolder {
private static KeyPair generateRSAKeyPair(int keySize) {
try {
log.debug("生成{}位RSA密钥对", keySize);
- return SecureUtil.generateKeyPair(RSA_ALGORITHM, keySize);
+ return SecureUtil.generateKeyPair("RSA", keySize);
} catch (Exception e) {
throw new RuntimeException("RSA密钥对生成失败: " + keySize + "位", e);
}
@@ -351,17 +324,14 @@ public class CertificateContextHolder {
private static void saveKeyPairToFiles(KeyPair keyPair, String privateKeyPath, String publicKeyPath) {
try {
// 保存私钥
- File privateKeyFileObj = FileTools.getFileOrCreat(privateKeyPath);
+ privateKeyFile = FileTools.getFileOrCreat(privateKeyPath);
PemUtil.writePemObject("PRIVATE KEY", keyPair.getPrivate().getEncoded(),
- FileUtil.getWriter(privateKeyFileObj, StandardCharsets.UTF_8, false));
+ FileUtil.getWriter(privateKeyFile, StandardCharsets.UTF_8, false));
// 保存公钥
- File publicKeyFileObj = FileTools.getFileOrCreat(publicKeyPath);
+ publicKeyFile = FileTools.getFileOrCreat(publicKeyPath);
PemUtil.writePemObject("PUBLIC KEY", keyPair.getPublic().getEncoded(),
- FileUtil.getWriter(publicKeyFileObj, StandardCharsets.UTF_8, false));
-
- publicKeyFile = publicKeyFileObj;
- privateKeyFile = privateKeyFileObj;
+ FileUtil.getWriter(publicKeyFile, StandardCharsets.UTF_8, false));
log.debug("密钥对已保存: {} 和 {}", privateKeyPath, publicKeyPath);
@@ -381,8 +351,8 @@ public class CertificateContextHolder {
PublicKey publicKey4096 = keyPair.getPublic();
// 创建内容签名器
- ContentSigner signer = new JcaContentSignerBuilder(SIGNATURE_ALGORITHM).build(privateKey4096);
- JcaX509CertificateConverter certConverter = new JcaX509CertificateConverter().setProvider(BC_PROVIDER);
+ ContentSigner signer = new JcaContentSignerBuilder("SHA256withRSA").build(privateKey4096);
+ JcaX509CertificateConverter certConverter = new JcaX509CertificateConverter().setProvider("BC");
// 生成授权码签名CA证书
Certificate codeCertificate = generateCodeCACertificate(publicKey4096, signer, certConverter);
@@ -412,11 +382,11 @@ public class CertificateContextHolder {
private static Certificate generateCodeCACertificate(PublicKey publicKey, ContentSigner signer,
JcaX509CertificateConverter certConverter) throws Exception {
JcaX509v3CertificateBuilder certificateBuilder = new JcaX509v3CertificateBuilder(
- new X500Name(CODE_CA_DN), // 颁发者DN
+ new X500Name("CN=JetProfile CA"), // 颁发者DN
BigInteger.valueOf(System.currentTimeMillis()), // 序列号
- DateUtil.yesterday(), // 生效日期(昨天,避免时钟偏差)
- DateUtil.date().offset(DateField.YEAR, CERTIFICATE_VALIDITY_YEARS), // 过期日期
- new X500Name(APP_SUBJECT_DN), // 主体DN
+ DateUtil.yesterday().toJdkDate(), // 生效日期(昨天,避免时钟偏差)
+ DateUtil.date().offset(DateField.YEAR, 100).toJdkDate(), // 过期日期
+ new X500Name("CN=QiuMo-Jetbrains-Help"), // 主体DN
SubjectPublicKeyInfo.getInstance(publicKey.getEncoded())); // 公钥信息
return certConverter.getCertificate(certificateBuilder.build(signer));
@@ -433,11 +403,11 @@ public class CertificateContextHolder {
private static Certificate generateServerCACertificate(PublicKey publicKey, ContentSigner signer,
JcaX509CertificateConverter certConverter) throws Exception {
JcaX509v3CertificateBuilder serversCertBuilder = new JcaX509v3CertificateBuilder(
- new X500Name(LICENSE_SERVER_CA_DN), // 颁发者DN
+ new X500Name("CN=License Servers CA"), // 颁发者DN
BigInteger.valueOf(System.currentTimeMillis()), // 序列号
- DateUtil.yesterday(), // 生效日期
- DateUtil.date().offset(DateField.YEAR, CERTIFICATE_VALIDITY_YEARS), // 过期日期
- new X500Name(APP_SUBJECT_DN), // 主体DN
+ DateUtil.yesterday().toJdkDate(), // 生效日期
+ DateUtil.date().offset(DateField.YEAR, 100).toJdkDate(), // 过期日期
+ new X500Name("CN=QiuMo-Jetbrains-Help"), // 主体DN
SubjectPublicKeyInfo.getInstance(publicKey.getEncoded())); // 公钥信息
return certConverter.getCertificate(serversCertBuilder.build(signer));
@@ -463,11 +433,11 @@ public class CertificateContextHolder {
private static Certificate generateServerChildCertificate(PublicKey publicKey4096,
ContentSigner signer, JcaX509CertificateConverter certConverter) throws Exception {
JcaX509v3CertificateBuilder childCertBuilder = new JcaX509v3CertificateBuilder(
- new X500Name(LICENSE_SERVER_CA_DN), // 颁发者DN
+ new X500Name("CN=License Servers CA"), // 颁发者DN
BigInteger.valueOf(System.currentTimeMillis()), // 序列号
- DateUtil.yesterday(), // 生效日期
- DateUtil.date().offset(DateField.YEAR, CERTIFICATE_VALIDITY_YEARS), // 过期日期
- new X500Name(LICENSE_SERVER_SUBJECT_DN), // 主体DN(具体域名)
+ DateUtil.yesterday().toJdkDate(), // 生效日期
+ DateUtil.date().offset(DateField.YEAR, 100).toJdkDate(), // 过期日期
+ new X500Name("CN=qiumo.lsrv.jetbrains.com"), // 主体DN(具体域名)
SubjectPublicKeyInfo.getInstance(publicKey4096.getEncoded())); // 公钥信息
// 添加证书扩展
@@ -494,7 +464,7 @@ public class CertificateContextHolder {
// 2. 主体备用名称:DNS域名
GeneralNamesBuilder generalNamesBuilder = new GeneralNamesBuilder();
- GeneralName dnsName = new GeneralName(GeneralName.dNSName, LICENSE_SERVER_DOMAIN);
+ GeneralName dnsName = new GeneralName(GeneralName.dNSName, "qiumo.lsrv.jetbrains.com");
generalNamesBuilder.addName(dnsName);
GeneralNames generalNames = generalNamesBuilder.build();
certBuilder.addExtension(Extension.subjectAlternativeName, false, generalNames);
diff --git a/src/main/resources/external/agent/ja-netfilter.zip b/src/main/resources/external/agent/ja-netfilter.zip
index 6f715c633ef5b37755e6c284a81f3a23f852d689..256ed78226ea35c6a0e4d5c06ee9e0329bac9370 100644
GIT binary patch
delta 836
zcmZ2KoAvT^R=EIgW)?065b*NRi3T&E1UrzP7^cX=528ClSOh`zTWv6ZvL@q37Ga>k
zu{@TMNuB|_6WAG4
zfT}K5G4M@D!6QWaQ`W{b40U==&or#P<
z6|X%R9)iKH2a{=?)`04RIBA?{dJ+0(o~A(5!--()7%{Vif->ed3P=`S*#00GKvW
z`-9|PXkbrHUBxep>hA|g=B4BnPoL<+Xd%}qD!FclI0J*G317`=bmP7(SabFrbFXBu}70O+JjlXzr1%LKsw9lmjxx
zMCniUq$o~4mikAc3=Ddb=tdps02-C#%c#!JurKJF@rK)sP3#j}tID;v;L47@=2iG_jTv>Pxq7yz+Nse1qb
delta 1304
zcmcaSopt?e*02C?W)?065Kt)8js`QJ1TT=zO4Q9uElJDFDM>BTM<}&MQ!0Y4bfTQ1
zpbUnfbBLfEhTv>%EGkcJ6jVT0Ik}$EetM!eqnMy9y42>c^KLBHgn2|0&2^&a$|v7o
zRKm1$^FPLS{DSi6iZ_1{d?JqN?#(weugGIMa`Ohyb^|PCTURaS!=n08$9K_sMkaX%
zTv4C`bPfmzKq%A*;bKq#3o|lEF#O)`F!7Pn9Yz=(vnIC}#1HUB7>^lkAmi&nW`NAs
z24a*5PtMOv%S_itwkC(AbR)>vkR;JfAiDe{YahZIP&(jX;GClxIqS$GcaV98KrF)m
z^F;%Y7YoEFws1kMNy#gouHeBa$-XjDYZ=hY={4?*s@ifWnh&9ChUzWIFHbE3={B9X
zO+X&i!hh&`ri*znDziVf)&Se$;K8UWuK>420jT-_BbpPZmwPbEi^Kd5qhps|TLf}v
zlsBWSye!;=2A~OQOz0+bdNZoj&nWr3928m%z5UMZ|8Jp04rZ!_g&HVs)K{SySddei
zo|#vS5;=^E1LuH@htUgVg-{}Ax_~F62wLbwp&LBi%#+byULM6ek-N}rpFZ7_F-RUY
zZu~BxEBfup7>E?Kpnx&{gsv#gi!oRWHO5XWF`_0Bm}g6ia;7_aGMecBsh$+Y$;VRv
z2$;9^B!OiY+_?%sOX>~L^iNmuW>i;$1q+N0@MdKLs%GE=!e6Wm4D;QA@y-AM)fq;i
diff --git a/src/test/java/com/qiumo/help/QiuMoJetbrainsHelpApplicationTests.java b/src/test/java/com/qiumo/help/QiuMoJetbrainsHelpApplicationTests.java
deleted file mode 100644
index 1b8236a..0000000
--- a/src/test/java/com/qiumo/help/QiuMoJetbrainsHelpApplicationTests.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.qiumo.help;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class QiuMoJetbrainsHelpApplicationTests {
-
- @Test
- void contextLoads() {
- }
-
-}