|
32 | 32 | import java.security.cert.CertificateEncodingException; |
33 | 33 | import java.security.cert.X509Certificate; |
34 | 34 | import java.util.Arrays; |
| 35 | +import java.util.Optional; |
35 | 36 | import java.util.stream.Collectors; |
36 | 37 |
|
37 | 38 | public final class CertificateData { |
38 | 39 |
|
39 | | - public static String getSubjectCN(X509Certificate certificate) throws CertificateEncodingException { |
| 40 | + public static Optional<String> getSubjectCN(X509Certificate certificate) throws CertificateEncodingException { |
40 | 41 | return getSubjectField(certificate, BCStyle.CN); |
41 | 42 | } |
42 | 43 |
|
43 | | - public static String getSubjectSurname(X509Certificate certificate) throws CertificateEncodingException { |
| 44 | + public static Optional<String> getSubjectSurname(X509Certificate certificate) throws CertificateEncodingException { |
44 | 45 | return getSubjectField(certificate, BCStyle.SURNAME); |
45 | 46 | } |
46 | 47 |
|
47 | | - public static String getSubjectGivenName(X509Certificate certificate) throws CertificateEncodingException { |
| 48 | + public static Optional<String> getSubjectGivenName(X509Certificate certificate) throws CertificateEncodingException { |
48 | 49 | return getSubjectField(certificate, BCStyle.GIVENNAME); |
49 | 50 | } |
50 | 51 |
|
51 | | - public static String getSubjectIdCode(X509Certificate certificate) throws CertificateEncodingException { |
| 52 | + public static Optional<String> getSubjectIdCode(X509Certificate certificate) throws CertificateEncodingException { |
52 | 53 | return getSubjectField(certificate, BCStyle.SERIALNUMBER); |
53 | 54 | } |
54 | 55 |
|
55 | | - public static String getSubjectCountryCode(X509Certificate certificate) throws CertificateEncodingException { |
| 56 | + public static Optional<String> getSubjectCountryCode(X509Certificate certificate) throws CertificateEncodingException { |
56 | 57 | return getSubjectField(certificate, BCStyle.C); |
57 | 58 | } |
58 | 59 |
|
59 | | - private static String getSubjectField(X509Certificate certificate, ASN1ObjectIdentifier fieldId) throws CertificateEncodingException { |
| 60 | + private static Optional<String> getSubjectField(X509Certificate certificate, ASN1ObjectIdentifier fieldId) throws CertificateEncodingException { |
60 | 61 | return getField(new JcaX509CertificateHolder(certificate).getSubject(), fieldId); |
61 | 62 | } |
62 | 63 |
|
63 | | - private static String getField(X500Name x500Name, ASN1ObjectIdentifier fieldId) throws CertificateEncodingException { |
| 64 | + private static Optional<String> getField(X500Name x500Name, ASN1ObjectIdentifier fieldId) { |
64 | 65 | // Example value: [C=EE, CN=JÕEORG\,JAAK-KRISTJAN\,38001085718, 2.5.4.4=#0c074ac395454f5247, 2.5.4.42=#0c0d4a41414b2d4b524953544a414e, 2.5.4.5=#1311504e4f45452d3338303031303835373138] |
65 | 66 | final RDN[] rdns = x500Name.getRDNs(fieldId); |
66 | 67 | if (rdns.length == 0 || rdns[0].getFirst() == null) { |
67 | | - throw new CertificateEncodingException("X500 name RDNs empty or first element is null"); |
| 68 | + return Optional.empty(); |
68 | 69 | } |
69 | | - return Arrays.stream(rdns) |
| 70 | + return Optional.of(Arrays.stream(rdns) |
70 | 71 | .map(rdn -> IETFUtils.valueToString(rdn.getFirst().getValue())) |
71 | | - .collect(Collectors.joining(", ")); |
| 72 | + .collect(Collectors.joining(", "))); |
72 | 73 | } |
73 | 74 |
|
74 | 75 | private CertificateData() { |
|
0 commit comments