Merge
authormullan
Mon, 23 Nov 2009 13:57:52 -0500
changeset 4327 7c352d15334c
parent 4325 38a035021ba1 (current diff)
parent 4326 6874332ce959 (diff)
child 4328 9591511c1d88
Merge
--- a/jdk/src/share/classes/sun/security/validator/PKIXValidator.java	Mon Nov 23 10:29:33 2009 -0700
+++ b/jdk/src/share/classes/sun/security/validator/PKIXValidator.java	Mon Nov 23 13:57:52 2009 -0500
@@ -150,9 +150,17 @@
                 ("null or zero-length certificate chain");
         }
         if (TRY_VALIDATOR) {
-            // check if chain contains trust anchor
+            // check that chain is in correct order and check if chain contains
+            // trust anchor
+            X500Principal prevIssuer = null;
             for (int i = 0; i < chain.length; i++) {
-                if (trustedCerts.contains(chain[i])) {
+                X509Certificate cert = chain[i];
+                if (i != 0 &&
+                    !cert.getSubjectX500Principal().equals(prevIssuer)) {
+                    // chain is not ordered correctly, call builder instead
+                    return doBuild(chain, otherCerts);
+                }
+                if (trustedCerts.contains(cert)) {
                     if (i == 0) {
                         return new X509Certificate[] {chain[0]};
                     }
@@ -161,6 +169,7 @@
                     System.arraycopy(chain, 0, newChain, 0, i);
                     return doValidate(newChain);
                 }
+                prevIssuer = cert.getIssuerX500Principal();
             }
 
             // apparently issued by trust anchor?
@@ -303,5 +312,4 @@
                 ("PKIX path building failed: " + e.toString(), e);
         }
     }
-
 }