@@ -1246,7 +1246,7 @@ private void testSphincsPlusStore()
12461246 }
12471247
12481248 public void testPKCS12StoreFriendlyName ()
1249- throws Exception
1249+ throws Exception
12501250 {
12511251 byte [] storeBytes = Base64 .decode ("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" );
12521252 char [] storePassword = "Axw9eE51lKEx0IuqHbzlJ+sx" .toCharArray ();
@@ -1267,7 +1267,7 @@ public void testPKCS12StoreFriendlyName()
12671267
12681268 String alias1 = store1 .aliases ().nextElement ();
12691269 String alias2 = store2 .aliases ().nextElement ();
1270- PKCS12BagAttributeCarrier cert2 = (PKCS12BagAttributeCarrier ) store2 .getCertificate (alias2 );
1270+ PKCS12BagAttributeCarrier cert2 = (PKCS12BagAttributeCarrier )store2 .getCertificate (alias2 );
12711271
12721272 if (cert2 .hasFriendlyName ())
12731273 {
@@ -1285,7 +1285,7 @@ public void testPKCS12StoreFriendlyName()
12851285
12861286 alias1 = store1 .aliases ().nextElement ();
12871287 alias2 = store2 .aliases ().nextElement ();
1288- cert2 = (PKCS12BagAttributeCarrier ) store2 .getCertificate (alias2 );
1288+ cert2 = (PKCS12BagAttributeCarrier )store2 .getCertificate (alias2 );
12891289
12901290 if (!cert2 .hasFriendlyName ())
12911291 {
@@ -1295,13 +1295,13 @@ public void testPKCS12StoreFriendlyName()
12951295 // Add custom friendlyName to store1
12961296 if (store1 .isKeyEntry (alias1 ))
12971297 {
1298- KeyStore .PrivateKeyEntry pkEntry = (KeyStore .PrivateKeyEntry ) store1 .getEntry (alias1 , new KeyStore .PasswordProtection (storePassword ));
1298+ KeyStore .PrivateKeyEntry pkEntry = (KeyStore .PrivateKeyEntry )store1 .getEntry (alias1 , new KeyStore .PasswordProtection (storePassword ));
12991299 ((PKCS12BagAttributeCarrier )pkEntry .getCertificate ()).setFriendlyName ("my_custom_friendly_name" );
13001300 ((PKCS12BagAttributeCarrier )pkEntry .getPrivateKey ()).setFriendlyName ("my_custom_friendly_name" );
13011301 }
13021302 else
13031303 {
1304- KeyStore .TrustedCertificateEntry entry = (KeyStore .TrustedCertificateEntry ) store1 .getEntry (alias1 , null );
1304+ KeyStore .TrustedCertificateEntry entry = (KeyStore .TrustedCertificateEntry )store1 .getEntry (alias1 , null );
13051305 ((PKCS12BagAttributeCarrier )entry .getTrustedCertificate ()).setFriendlyName ("my_custom_friendly_name" );
13061306 }
13071307
@@ -1326,13 +1326,13 @@ public void testPKCS12StoreFriendlyName()
13261326 // Add custom friendlyName to store1
13271327 if (store1 .isKeyEntry (alias1 ))
13281328 {
1329- KeyStore .PrivateKeyEntry pkEntry = (KeyStore .PrivateKeyEntry ) store1 .getEntry (alias1 , new KeyStore .PasswordProtection (storePassword ));
1329+ KeyStore .PrivateKeyEntry pkEntry = (KeyStore .PrivateKeyEntry )store1 .getEntry (alias1 , new KeyStore .PasswordProtection (storePassword ));
13301330 ((PKCS12BagAttributeCarrier )pkEntry .getCertificate ()).setFriendlyName ("my_custom_friendly_name" );
13311331 ((PKCS12BagAttributeCarrier )pkEntry .getPrivateKey ()).setFriendlyName ("my_custom_friendly_name" );
13321332 }
13331333 else
13341334 {
1335- KeyStore .TrustedCertificateEntry entry = (KeyStore .TrustedCertificateEntry ) store1 .getEntry (alias1 , null );
1335+ KeyStore .TrustedCertificateEntry entry = (KeyStore .TrustedCertificateEntry )store1 .getEntry (alias1 , null );
13361336 ((PKCS12BagAttributeCarrier )entry .getTrustedCertificate ()).setFriendlyName ("my_custom_friendly_name" );
13371337 }
13381338
@@ -2219,6 +2219,42 @@ private void testLoadRepeatedLocalKeyID()
22192219 isTrue (store .getCertificateChain ("45cbf1116fb3f38b2984b3c7224cae70a74f7789" ).length == 1 );
22202220 }
22212221
2222+ private void checkNoDuplicateOracleTrustedCertAttribute ()
2223+ throws Exception
2224+ {
2225+ String keystoreType = "PKCS12" ;
2226+ String certificateAlias = "myAlias" ;
2227+ String keystorePassword = "myPassword" ;
2228+
2229+ KeyPair kp1 = TestUtils .generateRSAKeyPair ();
2230+ KeyPair kp2 = TestUtils .generateRSAKeyPair ();
2231+
2232+ // generate certificate
2233+ X509Certificate rootCertificate = TestUtils .generateRootCert (kp1 , new X500Name ("CN=KP1 ROOT" ));
2234+ X509Certificate originalCertificate = TestUtils .generateEndEntityCert (kp2 .getPublic (), new X500Name ("CN=KP3 EE" ), KeyPurposeId .id_kp_capwapAC , KeyPurposeId .id_kp_capwapWTP , kp1 .getPrivate (), rootCertificate );
2235+
2236+ // store original certificate to a truststore
2237+ KeyStore firstTrustStore = KeyStore .getInstance ("PKCS12" , "BC" );
2238+ firstTrustStore .load (null , new char [0 ]);
2239+ firstTrustStore .setCertificateEntry (certificateAlias , originalCertificate );
2240+ ByteArrayOutputStream bOut = new ByteArrayOutputStream ();
2241+ firstTrustStore .store (bOut , keystorePassword .toCharArray ());
2242+
2243+ // read certificate from the truststore
2244+ KeyStore firstTrustStoreReadAgain = KeyStore .getInstance ("PKCS12" , "BC" );
2245+ firstTrustStoreReadAgain .load (new ByteArrayInputStream (bOut .toByteArray ()), keystorePassword .toCharArray ());
2246+ Certificate certificateReadFromFirstTrustStore = firstTrustStoreReadAgain .getCertificate (certificateAlias );
2247+
2248+ KeyStore secondTrustStore = KeyStore .getInstance ("PKCS12" , "BC" );
2249+ secondTrustStore .load (null , new char [0 ]);
2250+ secondTrustStore .setCertificateEntry (certificateAlias , certificateReadFromFirstTrustStore );
2251+ bOut = new ByteArrayOutputStream ();
2252+ secondTrustStore .store (bOut , keystorePassword .toCharArray ());
2253+
2254+ KeyStore secondTrustStoreReadWithoutBc = KeyStore .getInstance ("PKCS12" , "SunJSSE" );
2255+ secondTrustStoreReadWithoutBc .load (new ByteArrayInputStream (bOut .toByteArray ()), keystorePassword .toCharArray ());
2256+ }
2257+
22222258 public String getName ()
22232259 {
22242260 return "PKCS12Store" ;
@@ -2231,7 +2267,7 @@ private void testJKS()
22312267 {
22322268 return ;
22332269 }
2234-
2270+
22352271 KeyStore ks = KeyStore .getInstance ("PKCS12" , BC );
22362272
22372273 ks .load (new ByteArrayInputStream (JKS_Store ), JKS_TEST_PWD );
@@ -2249,7 +2285,7 @@ private void testStoreType(String storeType, boolean isMacExpected)
22492285 KeyStore keyStore = KeyStore .getInstance (storeType , "BC" );
22502286 keyStore .load (null , null );
22512287
2252- keyStore .setKeyEntry ("key" , kp .getPrivate (), null , new Certificate [] { cert });
2288+ keyStore .setKeyEntry ("key" , kp .getPrivate (), null , new Certificate []{ cert });
22532289
22542290 ByteArrayOutputStream bOut = new ByteArrayOutputStream ();
22552291
@@ -2273,7 +2309,7 @@ private void testStoreType(String storeType, boolean isMacExpected)
22732309 }
22742310
22752311 }
2276-
2312+
22772313 private void testAES256_AES128 ()
22782314 throws Exception
22792315 {
@@ -2337,6 +2373,7 @@ public void performTest()
23372373 }
23382374
23392375 testOrphanedCertCleanup ();
2376+ checkNoDuplicateOracleTrustedCertAttribute ();
23402377 }
23412378
23422379 public static void main (
0 commit comments