|
@@ -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
|
*
|