fix:p10增加ou

This commit is contained in:
waner
2026-05-07 15:04:24 +08:00
parent 03d8ccce78
commit 42b4ed1c38
3 changed files with 53 additions and 3 deletions
@@ -8,6 +8,9 @@ import org.bouncycastle.asn1.x500.style.BCStyle;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
@Data
@Schema(description = "证书主题信息")
public class Subject {
@@ -30,6 +33,9 @@ public class Subject {
@Schema(description = "组织单元 OU", example = "Cert")
private String orgUnit;
@Schema(description = "组织单元 OU 列表,最多支持两个;传入后优先于 orgUnit", example = "[\"Organizational-1\",\"CCFCCB\"]")
private List<String> orgUnits;
public String getDN() {
return toX500Name().toString();
}
@@ -40,8 +46,8 @@ public class Subject {
if (StringUtils.hasText(commonName)) {
builder.addRDN(BCStyle.CN, commonName);
}
if (StringUtils.hasText(orgUnit)) {
builder.addRDN(BCStyle.OU, orgUnit);
for (String unit : effectiveOrgUnits()) {
builder.addRDN(BCStyle.OU, unit);
}
if (StringUtils.hasText(org)) {
builder.addRDN(BCStyle.O, org);
@@ -59,9 +65,26 @@ public class Subject {
return builder.build();
}
private List<String> effectiveOrgUnits() {
List<String> units = new ArrayList<>();
if (orgUnits != null) {
for (String unit : orgUnits) {
if (StringUtils.hasText(unit)) {
units.add(unit.trim());
}
}
}
if (units.isEmpty() && StringUtils.hasText(orgUnit)) {
units.add(orgUnit.trim());
}
Assert.isTrue(units.size() <= 2, "组织单元最多支持2个");
return units;
}
public static Subject fromDN(String dn) {
Assert.hasText(dn, "DN不能为空");
Subject subject = new Subject();
List<String> orgUnits = new ArrayList<>();
String[] splits = dn.trim().split(",");
for (String split : splits) {
String trim = split.trim();
@@ -78,12 +101,16 @@ public class Subject {
subject.setOrg(trim.substring(2));
}
if (trim.startsWith("OU=")) {
subject.setOrgUnit(trim.substring(3));
orgUnits.add(trim.substring(3));
}
if (trim.startsWith("CN=")) {
subject.setCommonName(trim.substring(3));
}
}
if (!orgUnits.isEmpty()) {
subject.setOrgUnit(orgUnits.get(0));
subject.setOrgUnits(orgUnits);
}
Assert.hasText(subject.commonName, "通用名称不能为空");
return subject;
}
@@ -109,6 +109,7 @@ public class EntityService {
.setOrgName(request.getOrgName())
.setAlgoType(algoType)
.setKeyLen(keyLen)
//todo 后续增加密钥类型字段/增加加密密钥对字段
.setKeyIdx(keyIdx)
.setBackupData(Base64.getEncoder().encodeToString(backup.getData()))
.setPublicKey(Base64.getEncoder().encodeToString(publicKey.getData()))