Parcourir la source

Show alternate names in SSL dialog

Fixes issue 2197 (dev error),
fixes issue 51
tags/0.6.3m1rc1
Chris Smith il y a 15 ans
Parent
révision
49e7fd27ac

+ 36
- 2
src/com/dmdirc/ui/core/dialogs/sslcertificate/SSLCertificateDialogModel.java Voir le fichier

@@ -29,6 +29,7 @@ import com.dmdirc.CertificateManager.CertificateNotTrustedException;
29 29
 import java.security.cert.CertificateException;
30 30
 import java.security.cert.CertificateExpiredException;
31 31
 import java.security.cert.CertificateNotYetValidException;
32
+import java.security.cert.CertificateParsingException;
32 33
 import java.security.cert.X509Certificate;
33 34
 import java.util.ArrayList;
34 35
 import java.util.List;
@@ -128,10 +129,16 @@ public class SSLCertificateDialogModel {
128 129
                 cert.getNotAfter().toString(), tooOld, false));
129 130
         res.add(group);
130 131
 
132
+        final boolean wrongName = index == 0 && !manager.isValidHost(cert);
133
+        final String names = getAlternateNames(cert);
131 134
         final Map<String, String> fields = CertificateManager.getDNFieldsFromCert(cert);
135
+
132 136
         group = new ArrayList<CertificateInformationEntry>();
133
-        addCertField(fields, group, "Common name", "CN", index == 0
134
-                && !manager.isValidHost(cert));
137
+        addCertField(fields, group, "Common name", "CN", wrongName);
138
+
139
+        group.add(new CertificateInformationEntry("Alternate names", 
140
+                names == null ? NOTPRESENT : names, wrongName, names == null));
141
+
135 142
         addCertField(fields, group, "Organisation", "O", false);
136 143
         addCertField(fields, group, "Unit", "OU", false);
137 144
         addCertField(fields, group, "Locality", "L", false);
@@ -151,6 +158,33 @@ public class SSLCertificateDialogModel {
151 158
         return res;
152 159
     }
153 160
 
161
+    protected String getAlternateNames(final X509Certificate cert) {
162
+        final StringBuilder res = new StringBuilder();
163
+
164
+        try {
165
+            if (cert.getSubjectAlternativeNames() == null) {
166
+                return null;
167
+            }
168
+
169
+            for (List<?> entry : cert.getSubjectAlternativeNames()) {
170
+                final int type = ((Integer) entry.get(0)).intValue();
171
+
172
+                // DNS or IP
173
+                if (type == 2 || type == 7) {
174
+                    if (res.length() > 0) {
175
+                        res.append(", ");
176
+                    }
177
+
178
+                    res.append(entry.get(1));
179
+                }
180
+            }
181
+        } catch (CertificateParsingException ex) {
182
+            // Do nothing
183
+        }
184
+
185
+        return res.toString();
186
+    }
187
+
154 188
     /**
155 189
      * Adds a field to the specified group.
156 190
      *

Chargement…
Annuler
Enregistrer