diff --git a/kse/src/org/kse/gui/dialogs/DViewCertificate.java b/kse/src/org/kse/gui/dialogs/DViewCertificate.java index 7e52a2d69..8f81ecdbb 100644 --- a/kse/src/org/kse/gui/dialogs/DViewCertificate.java +++ b/kse/src/org/kse/gui/dialogs/DViewCertificate.java @@ -499,22 +499,23 @@ public void run() { private DefaultMutableTreeNode createCertificateNodes(X509Certificate[] certs) { DefaultMutableTreeNode certsNode = new DefaultMutableTreeNode(); + Set originalSet = new TreeSet<>(new X509CertificateComparator()); + Collections.addAll(originalSet, certs); Set certSet = new TreeSet<>(new X509CertificateComparator()); Collections.addAll(certSet, certs); // first find certs with no issuer in set and add them to the tree certSet.stream() - .filter(cert -> !isIssuerInSet(cert, certSet)) - .forEach(cert -> certsNode.add(new DefaultMutableTreeNode(cert))); - certSet.removeIf(cert -> !isIssuerInSet(cert, certSet)); + .filter(cert -> !isIssuerInSet(cert, certSet)) + .forEach(cert -> certsNode.add(new DefaultMutableTreeNode(cert))); + certSet.removeIf(cert -> !isIssuerInSet(cert, originalSet)); // then add root certs certSet.stream() - .filter(X509CertUtil::isCertificateSelfSigned) - .forEach(cert -> certsNode.add(new DefaultMutableTreeNode(cert))); + .filter(X509CertUtil::isCertificateSelfSigned) + .forEach(cert -> certsNode.add(new DefaultMutableTreeNode(cert))); certSet.removeIf(X509CertUtil::isCertificateSelfSigned); - // then attach the other certs to their issuers while (!certSet.isEmpty()) {