From 0d9f00f3660553f847ea2f6f2083d3b0b71ae275 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 3 Jun 2022 17:23:26 +0200 Subject: [PATCH] Use subject CN as DNS name --- .../eu/faircode/email/EntityCertificate.java | 46 +++++++++++++------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/EntityCertificate.java b/app/src/main/java/eu/faircode/email/EntityCertificate.java index d6c4586fa0..aa91cb220c 100644 --- a/app/src/main/java/eu/faircode/email/EntityCertificate.java +++ b/app/src/main/java/eu/faircode/email/EntityCertificate.java @@ -218,23 +218,39 @@ public class EntityCertificate { List result = new ArrayList<>(); Collection> altNames = certificate.getSubjectAlternativeNames(); - if (altNames == null) - return result; - - for (List altName : altNames) - try { - if (altName.get(0).equals(GeneralName.dNSName)) - result.add((String) altName.get(1)); - else if (altName.get(0).equals(GeneralName.iPAddress)) - if (altName.get(1) instanceof String) + if (altNames != null) + for (List altName : altNames) + try { + if (altName.get(0).equals(GeneralName.dNSName)) result.add((String) altName.get(1)); - else { - Object val = altName.get(1); - Log.e("GeneralName.iPAddress type=" + (val == null ? null : val.getClass())); + else if (altName.get(0).equals(GeneralName.iPAddress)) + if (altName.get(1) instanceof String) + result.add((String) altName.get(1)); + else { + Object val = altName.get(1); + Log.e("GeneralName.iPAddress type=" + (val == null ? null : val.getClass())); + } + } catch (Throwable ex) { + Log.e(ex); + } + + try { + X500Name name = new JcaX509CertificateHolder(certificate).getSubject(); + if (name != null) + for (RDN rdn : name.getRDNs(BCStyle.CN)) + for (AttributeTypeAndValue tv : rdn.getTypesAndValues()) { + ASN1Encodable enc = tv.getValue(); + if (enc == null) + continue; + String cn = enc.toString(); + if (TextUtils.isEmpty(cn)) + continue; + if (!result.contains(cn)) + result.add(cn); } - } catch (Throwable ex) { - Log.e(ex); - } + } catch (Throwable ex) { + Log.e(ex); + } return result; }