diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java index 9916a06281..6e12018beb 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySetup.java +++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java @@ -84,6 +84,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; +import java.security.Principal; import java.security.SecureRandom; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; @@ -1101,6 +1102,31 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac String fingerprint = EntityCertificate.getFingerprint(cert); List emails = EntityCertificate.getAltSubjectName(cert); + if (emails.size() == 0) { + Principal principal = cert.getSubjectDN(); + if (principal != null) { + String subject = principal.getName(); + if (subject != null) { + Log.i("Parsing subject=" + subject); + for (String p : subject.split(",")) { + String[] kv = p.split("="); + if (kv.length == 2) { + String key = kv[0].trim(); + String value = kv[1].trim().toLowerCase(); + if (Helper.EMAIL_ADDRESS.matcher(value).matches() && + ("CN".equalsIgnoreCase(key) || + "emailAddress".equalsIgnoreCase(key))) { + if (!emails.contains(value)) + emails.add(value); + } + } + } + } + } + } + + if (emails.size() == 0) + throw new IllegalArgumentException("No email address found in key"); DB db = DB.getInstance(context); for (String email : emails) {