private String hostNameMessage(X509Certificate cert, String hostname) {
    StringBuffer si = new StringBuffer();

    si.append(master.getString(R.string.mtm_hostname_mismatch, hostname));
    si.append("\n\n");
    try {
      Collection<List<?>> sans = cert.getSubjectAlternativeNames();
      if (sans == null) {
        si.append(cert.getSubjectDN());
        si.append("\n");
      } else
        for (List<?> altName : sans) {
          Object name = altName.get(1);
          if (name instanceof String) {
            si.append("[");
            si.append((Integer) altName.get(0));
            si.append("] ");
            si.append(name);
            si.append("\n");
          }
        }
    } catch (CertificateParsingException e) {
      e.printStackTrace();
      si.append("<Parsing error: ");
      si.append(e.getLocalizedMessage());
      si.append(">\n");
    }
    si.append("\n");
    si.append(master.getString(R.string.mtm_connect_anyway));
    si.append("\n\n");
    si.append(master.getString(R.string.mtm_cert_details));
    certDetails(si, cert);
    return si.toString();
  }
 /**
  * Extracts the array of SubjectAlt DNS names from an X509Certificate. Returns null if there
  * aren't any.
  *
  * <p>Note: Java doesn't appear able to extract international characters from the SubjectAlts. It
  * can only extract international characters from the CN field.
  *
  * <p>(Or maybe the version of OpenSSL I'm using to test isn't storing the international
  * characters correctly in the SubjectAlts?).
  *
  * @param cert X509Certificate
  * @return Array of SubjectALT DNS names stored in the certificate.
  */
 public static String[] getDNSSubjectAlts(X509Certificate cert) {
   LinkedList subjectAltList = new LinkedList();
   Collection c = null;
   try {
     c = cert.getSubjectAlternativeNames();
   } catch (CertificateParsingException cpe) {
     // Should probably log.debug() this?
     cpe.printStackTrace();
   }
   if (c != null) {
     Iterator it = c.iterator();
     while (it.hasNext()) {
       List list = (List) it.next();
       int type = ((Integer) list.get(0)).intValue();
       // If type is 2, then we've got a dNSName
       if (type == 2) {
         String s = (String) list.get(1);
         subjectAltList.add(s);
       }
     }
   }
   if (!subjectAltList.isEmpty()) {
     String[] subjectAlts = new String[subjectAltList.size()];
     subjectAltList.toArray(subjectAlts);
     return subjectAlts;
   } else {
     return null;
   }
 }