证书导入结果修改
This commit is contained in:
@@ -50,8 +50,8 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
arguments.addArgument("orgData", "12345678");
|
||||
arguments.addArgument("ip", "172.1.41.139");
|
||||
arguments.addArgument("ip2", "172.1.41.96");
|
||||
// arguments.addArgument("port", "8891");
|
||||
// arguments.addArgument("ip2", "172.16.17.161");
|
||||
arguments.addArgument("port", "8891");
|
||||
// arguments.addArgument("ip2", "172.16.17.161");
|
||||
arguments.addArgument("dataLength", "1024");
|
||||
arguments.addArgument("type", "1");
|
||||
arguments.addArgument("sign", "12345678");
|
||||
@@ -71,8 +71,8 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
oData = context.getParameter("orgData");
|
||||
ip = context.getParameter("ip");
|
||||
ip2 = context.getParameter("ip2");
|
||||
// port = Integer.parseInt(context.getParameter("8891"));
|
||||
// ip2 = context.getParameter("ip2");
|
||||
port = context.getIntParameter("8891");
|
||||
// ip2 = context.getParameter("ip2");
|
||||
dataLength = context.getIntParameter("dataLength");
|
||||
type = context.getIntParameter("type");
|
||||
sign = context.getParameter("sign");
|
||||
@@ -84,7 +84,7 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
//
|
||||
// SydApiBuilder builder = new SydApiBuilder().setIp(ip);
|
||||
// final SydApi4j api = (SydApi4j) builder.build();
|
||||
SydApi4j.SYD_Set_Parameter_HA(ip, ip2, 8889, 1000);
|
||||
SydApi4j.SYD_Set_Parameter_HA(ip, ip2, port, 2000);
|
||||
final SydApi4j api1 = (SydApi4j) new SydApi4j();
|
||||
return api1;
|
||||
}
|
||||
@@ -113,8 +113,8 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
// api.get().SYD_NakedSign(SM2dn, orgData, (byte[]) null);
|
||||
api.get().SYD_NakedSign(orgData,SM2dn);
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(Util.encodeBase64(nakedSign1), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
//sr.setResponseData(Util.encodeBase64(nakedSign1), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
|
||||
|
||||
case 2:
|
||||
@@ -122,103 +122,105 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
api.get().SYD_NakedVerify(orgData,Util.hexString2Bytes(sign), SM2dn);
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(String.valueOf(nakedVerify1), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
//RSA裸签
|
||||
api.get().SYD_NakedSign(1, RSAdn,orgData,(byte[])null);
|
||||
api.get().SYD_NakedSign(1, RSAdn,orgData,(byte[])null);
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(Util.encodeBase64(nakedSign2), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
api.get().SYD_NakedVerify(1, RSAdn,Util.decodeBase64(sign),orgData ,(byte[])null);
|
||||
api.get().SYD_NakedVerify(1, RSAdn,Util.decodeBase64(sign),orgData ,(byte[])null);
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(String.valueOf(nakedVerify2), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
// api.get().detachedSign(1, orgData, SM2dn);
|
||||
//p7 detached签名
|
||||
api.get().detachedSign(orgData, SM2dn);
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(detSign1, StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
// api.get().detachedVerify(1, orgData, sign);
|
||||
//p7 detached验签
|
||||
api.get().detachedVerify(orgData, detachedSign);
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(String.valueOf(detV1), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
break;
|
||||
|
||||
case 7:
|
||||
api.get().detachedSign(2,1, orgData, RSAdn);
|
||||
api.get().detachedSign(2,1, orgData, RSAdn);
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(detSign2, StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
api.get().detachedVerify(2,2, orgData, sign);
|
||||
api.get().detachedVerify(2,2, orgData, sign);
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(String.valueOf(detV2), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
break;
|
||||
|
||||
case 9:
|
||||
api.get().attachedSignHsm(orgData, SM2dn);
|
||||
api.get().attachedSignHsm(orgData, SM2dn);
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(attSign1, StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
break;
|
||||
|
||||
case 10:
|
||||
api.get().attachedVerify( sign.getBytes());
|
||||
api.get().attachedVerify( sign.getBytes());
|
||||
sr.setResponseCodeOK();
|
||||
// sr.setResponseData(String.valueOf(attV1), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
// sr.setResponseData(String.valueOf(attV1), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
|
||||
case 11:
|
||||
api.get().attachedSignRSAHsm(2, orgData, RSAdn);
|
||||
api.get().attachedSignRSAHsm(2, orgData, RSAdn);
|
||||
sr.setResponseCodeOK();
|
||||
// sr.setResponseData(attSign2, StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
// sr.setResponseData(attSign2, StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
|
||||
case 12:
|
||||
api.get().attachedVerifyRSA(2, sign);
|
||||
api.get().attachedVerifyRSA(2, sign);
|
||||
sr.setResponseCodeOK();
|
||||
// sr.setResponseData(String.valueOf(attV2), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
// sr.setResponseData(String.valueOf(attV2), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
|
||||
case 13:
|
||||
api.get().generateDE(SM2dn.getBytes(), 3, 1, orgData);
|
||||
// byte[] cipherKey = (byte[]) genSM2.get(SydApi.RET_CIPHER_KEY);
|
||||
api.get().generateDE(SM2dn.getBytes(), 3, 1, orgData);
|
||||
// byte[] cipherKey = (byte[]) genSM2.get(SydApi.RET_CIPHER_KEY);
|
||||
sr.setResponseCodeOK();
|
||||
// sr.setResponseData(new String(cipherKey), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
// sr.setResponseData(new String(cipherKey), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
|
||||
case 14:
|
||||
api.get().decryptDE(true, 1, SM2dn.getBytes(), sign);;
|
||||
// byte[] oData = (byte[]) denSM2.get("oData");
|
||||
api.get().decryptDE(true, 1, SM2dn.getBytes(), sign);;
|
||||
// byte[] oData = (byte[]) denSM2.get("oData");
|
||||
sr.setResponseCodeOK();
|
||||
// sr.setResponseData(new String(oData), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
// sr.setResponseData(new String(oData), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
|
||||
|
||||
case 15:
|
||||
api.get(). generateDE(RSAdn.getBytes(), 4, 1, orgData);
|
||||
// byte[] cipherKeyRSA = (byte[]) genRSA.get(SydApi.RET_CIPHER_KEY);
|
||||
api.get(). generateDE(RSAdn.getBytes(), 4, 1, orgData);
|
||||
// byte[] cipherKeyRSA = (byte[]) genRSA.get(SydApi.RET_CIPHER_KEY);
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(new String(cipherKeyRSA), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
break;
|
||||
|
||||
case 16:
|
||||
api.get().decryptDERSA(true, 1, RSAdn.getBytes(), sign);
|
||||
// byte[] oDataRSA = (byte[]) denRSA.get("oData");
|
||||
api.get().decryptDERSA(true, 1, RSAdn.getBytes(), sign);
|
||||
// byte[] oDataRSA = (byte[]) denRSA.get("oData");
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(new String(oDataRSA), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
break;
|
||||
|
||||
case 17:
|
||||
sr.setResponseCodeOK();
|
||||
break;
|
||||
break;
|
||||
case 18:
|
||||
testAhnx();
|
||||
sr.setResponseCodeOK();
|
||||
@@ -230,7 +232,7 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
default:
|
||||
sr.setResponseCodeOK();
|
||||
sr.setResponseData("请选择测试组", StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
break;
|
||||
}
|
||||
sr.setSuccessful(true);
|
||||
}catch (SydApiException e){
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.sunyard.entity;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 证书导入结果封装类
|
||||
*/
|
||||
public class ImportResult {
|
||||
/** 成功状态码 */
|
||||
public static final int CODE_SUCCESS = 2000;
|
||||
/** 部分成功状态码 */
|
||||
public static final int CODE_PARTIAL_SUCCESS = 2001;
|
||||
/** 完全失败状态码 */
|
||||
public static final int CODE_COMPLETE_FAILURE = 2002;
|
||||
/** 参数错误状态码 */
|
||||
public static final int CODE_INVALID_PARAM = 4001;
|
||||
|
||||
private int code; //返回码
|
||||
private String certDn; // 证书主题(DN)
|
||||
private List<String> errCnt; // 详细错误列表(每个失败的服务器)
|
||||
|
||||
// 构造方法
|
||||
public ImportResult() {
|
||||
}
|
||||
|
||||
public ImportResult(int code, String certDn) {
|
||||
this.code = code;
|
||||
this.certDn = certDn;
|
||||
}
|
||||
|
||||
// Getters and Setters
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
public String getCertDn() {
|
||||
return certDn;
|
||||
}
|
||||
|
||||
public void setCertDn(String certDn) {
|
||||
this.certDn = certDn;
|
||||
}
|
||||
|
||||
public List<String> getErrCnt() {
|
||||
return errCnt;
|
||||
}
|
||||
|
||||
public void setErrCnt(List<String> errCnt) {
|
||||
this.errCnt = errCnt;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package racal.sunyard.main;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.StopWatch;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
@@ -10,6 +11,7 @@ import com.sunyard.SydApi;
|
||||
import com.sunyard.SydApiException;
|
||||
import com.sunyard.cert.X509;
|
||||
import com.sunyard.constant.CertUsage;
|
||||
import com.sunyard.entity.ImportResult;
|
||||
import com.sunyard.entity.Struct;
|
||||
import com.sunyard.log.ILogFactory;
|
||||
import com.sunyard.log.ILogger;
|
||||
@@ -55,6 +57,7 @@ import java.security.cert.X509Certificate;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.Duration;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
@@ -718,14 +721,14 @@ public class SydApi4j implements SydApi {
|
||||
synchronized(reqLock) {
|
||||
byte[] sentData = this.syncSend(data);
|
||||
readData = this.syncRead(sentData);
|
||||
break;
|
||||
return readData;
|
||||
}
|
||||
} catch (SydApiException e) {
|
||||
handleNetworkFailure(e, retryCount, maxRetries); // 统一处理网络故障
|
||||
retryCount ++;
|
||||
}
|
||||
}
|
||||
return readData;
|
||||
throw new SydApiException("加密机连接失败,主备节点均不可用", -1);
|
||||
}
|
||||
|
||||
public byte[] SYD_NakedSign_OuterHash(byte[] orgData, String sCertDN) {
|
||||
@@ -1346,7 +1349,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
|
||||
|
||||
public String importCertToServers(List<String> addressList, int timeout, String cert, String bkCode, String snmpConfig) {
|
||||
public ImportResult importCertToServers(List<String> addressList, int timeout, String cert, String bkCode, String snmpConfig) {
|
||||
if (null == addressList || addressList.isEmpty()) {
|
||||
throw new IllegalArgumentException("签名服务器地址不能为空");
|
||||
}
|
||||
@@ -1380,6 +1383,9 @@ public class SydApi4j implements SydApi {
|
||||
} catch (Exception e) {
|
||||
log.warn("导入证书格式错误!");
|
||||
}
|
||||
ImportResult importResult = new ImportResult();
|
||||
importResult.setCertDn(dn);
|
||||
Gson gson = new Gson();
|
||||
if (!failures.isEmpty()) {
|
||||
//记录失败日志
|
||||
stringBuilder.append("行号:").append(bkCode).append("\n").append("DN:").append(dn)
|
||||
@@ -1390,7 +1396,6 @@ public class SydApi4j implements SydApi {
|
||||
.map(Object::toString)
|
||||
.collect(Collectors.joining(",")) + "]";
|
||||
String message = "支付签名证书导入失败!签名服务器地址:" + result + "| 证书对应行号:[" + bkCode + "]";
|
||||
Gson gson = new Gson();
|
||||
Map<String, String> map = gson.fromJson(snmpConfig, new TypeToken<Map<String, String>>() {}.getType());
|
||||
try (SnmpTrapSender sender = new SnmpTrapSender(map)) {
|
||||
sender.sendTrap(message, 2);
|
||||
@@ -1398,12 +1403,16 @@ public class SydApi4j implements SydApi {
|
||||
} catch (Exception e) {
|
||||
log.warn("snmp告警消息发送失败:{}", e.getMessage());
|
||||
}
|
||||
// Map<String, String> msgMap = new HashMap<>();
|
||||
// msgMap.put("alarmMsg", message);
|
||||
// msgMap.put("certDn", dn);
|
||||
// throw new SydApiException(gson.toJson(msgMap) ,56300, true);
|
||||
importResult.setErrCnt(failures);
|
||||
if (failures.size() == addressList.size()) {
|
||||
importResult.setCode(ImportResult.CODE_COMPLETE_FAILURE);
|
||||
} else {
|
||||
importResult.setCode(ImportResult.CODE_PARTIAL_SUCCESS);
|
||||
}
|
||||
} else {
|
||||
importResult.setCode(ImportResult.CODE_SUCCESS);
|
||||
}
|
||||
return dn;
|
||||
return importResult;
|
||||
}
|
||||
|
||||
private TaskContext<String> createTaskContext(String address, int timeout, String cert) {
|
||||
@@ -2359,22 +2368,22 @@ public class SydApi4j implements SydApi {
|
||||
* 连接或重连到有效节点
|
||||
*/
|
||||
public synchronized void connectHa() {
|
||||
// 优先尝试主节点
|
||||
if (!usingBackup.get()) {
|
||||
if (tryConnect(ha_ip1)) {
|
||||
// System.out.println("连接到主节点: " + ha_ip1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 连接到备节点
|
||||
if (tryConnect(ha_ip2)) {
|
||||
// System.out.println("连接到备节点: " + ha_ip2);
|
||||
usingBackup.set(true);
|
||||
// 优先尝试主节点
|
||||
if (!usingBackup.get()) {
|
||||
if (tryConnect(ha_ip1)) {
|
||||
log.info("连接到主节点,ip:{}", ha_ip1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
throw new SydApiException("所有节点均不可用", -100);
|
||||
// 连接到备节点
|
||||
if (tryConnect(ha_ip2)) {
|
||||
log.info("连接到备节点,ip:{}", ha_ip2);
|
||||
usingBackup.set(true);
|
||||
return;
|
||||
}
|
||||
|
||||
throw new SydApiException("节点连接异常", -100);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2396,7 +2405,7 @@ public class SydApi4j implements SydApi {
|
||||
this.socket = newSocket;
|
||||
return true;
|
||||
} catch (IOException e) {
|
||||
System.out.println("节点连接失败: " + ip + " - " + e.getMessage());
|
||||
log.info("节点连接失败,ip:{}/exception:{}", ip, e.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -2405,6 +2414,9 @@ public class SydApi4j implements SydApi {
|
||||
if (retryCount > maxRetries) {
|
||||
return;
|
||||
}
|
||||
StopWatch stopWatch = new StopWatch();
|
||||
stopWatch.start();
|
||||
log.info("socket收发信息异常,准备重试:{}/当前重试:{}次", e.getMessage(),retryCount + 1);
|
||||
// System.out.printf("线程[%s]网络故障,尝试切换节点 (重试: %d/%d)%n",
|
||||
// Thread.currentThread().getName(), retryCount + 1, maxRetries);
|
||||
|
||||
@@ -2413,20 +2425,20 @@ public class SydApi4j implements SydApi {
|
||||
|
||||
if (usingBackup.compareAndSet(currentState, newState)) {
|
||||
String targetIp = newState ? ha_ip2 : ha_ip1;
|
||||
// System.out.println("全局节点切换: " + (currentState ? "备机" : "主机") + "→" +
|
||||
// (newState ? "备机" : "主机"));
|
||||
|
||||
try {
|
||||
safeClose();
|
||||
connect(targetIp, ha_port, ha_timeout);
|
||||
// System.out.println("线程[" + Thread.currentThread().getName() + "]连接重建成功");
|
||||
// System.out.println("故障节点切换成功,当前使用:" + targetIp);
|
||||
log.info("故障节点切换成功,当前使用ip:{}", targetIp);
|
||||
} catch (Exception ex) {
|
||||
// System.out.println("线程[" + Thread.currentThread().getName() + "]节点切换失败: " + ex.getMessage());
|
||||
usingBackup.compareAndSet(newState, currentState);
|
||||
}
|
||||
} else {
|
||||
System.err.println("线程[" + Thread.currentThread().getName() + "]节点已被其他线程切换,使用新节点");
|
||||
}
|
||||
stopWatch.stop();
|
||||
log.info("节点切换时间:{}", stopWatch.getTotalTimeMillis());
|
||||
}
|
||||
|
||||
private void safeClose() {
|
||||
|
||||
Reference in New Issue
Block a user