Предлагам това "просто" решение за четене на csr
Трябва да добавите зависимост с
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcmail-jdk15on</artifactId>
<version>1.62</version>
</dependency>
Създайте нов обект CSRObject
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.x500.RDN;
import org.bouncycastle.asn1.x500.X500Name;
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.pkcs.PKCS10CertificationRequest;
import java.io.*;
public class CSRObject {
private final X500Name x500Name;
public CSRObject(final String csr) throws IOException {
final Reader pemReader = new StringReader(csr);
final PEMParser pemParser = new PEMParser(pemReader);
x500Name = ((PKCS10CertificationRequest) pemParser.readObject()).getSubject();
}
public String get(final CSRObjectEnum field) {
RDN[] rdnArray = x500Name.getRDNs(new ASN1ObjectIdentifier(field.code));
String retVal = null;
for (RDN item : rdnArray) {
retVal = item.getFirst().getValue().toString();
}
return retVal;
}
public enum CSRObjectEnum {
COUNTRY("2.5.4.6"),
STATE("2.5.4.8"),
LOCALE("2.5.4.7"),
ORGANIZATION("2.5.4.10"),
ORGANIZATION_UNIT("2.5.4.11"),
COMMON_NAME("2.5.4.3"),//
;
private final String code;
CSRObjectEnum(final String sCode) {
code = sCode;
}
}
}
И можете да тествате с този метод:
@Test
public void test() throws IOException {
final CSRObject csr = new CSRObject(TEST_CERTIF);
for (final CSRObject.CSRObjectEnum field : CSRObject.CSRObjectEnum.values()){
LOGGER.info("{}:{}", field.name(), csr.get(field));
}
}
с TEST_CERTIF е низ
private static final String TEST_CERTIF = "-----BEGIN CERTIFICATE REQUEST-----\n" +
"...\n" +
"-----END CERTIFICATE REQUEST-----\n";
person
Thierry
schedule
18.06.2019