3232import  java .security .KeyStore .PasswordProtection ;
3333import  java .security .KeyStoreException ;
3434import  java .security .SecureRandom ;
35+ import  java .security .Security ;
3536import  java .security .cert .Certificate ;
3637import  java .security .cert .X509Certificate ;
3738import  java .time .Instant ;
3839import  java .time .temporal .ChronoUnit ;
3940import  java .util .Date ;
4041import  javax .crypto .spec .SecretKeySpec ;
42+ import  javax .security .auth .x500 .X500Principal ;
43+ import  org .bouncycastle .jce .provider .BouncyCastleProvider ;
44+ import  org .bouncycastle .x509 .X509V3CertificateGenerator ;
4145import  org .junit .Before ;
4246import  org .junit .Test ;
43- import  sun .security .x509 .AlgorithmId ;
44- import  sun .security .x509 .CertificateAlgorithmId ;
45- import  sun .security .x509 .CertificateSerialNumber ;
46- import  sun .security .x509 .CertificateValidity ;
47- import  sun .security .x509 .CertificateX509Key ;
48- import  sun .security .x509 .X500Name ;
49- import  sun .security .x509 .X509CertImpl ;
50- import  sun .security .x509 .X509CertInfo ;
51- 
52- /* These internal sun classes are included solely for test purposes as 
53- this test cannot use BouncyCastle cert generation, as there are incompatibilities 
54- between how standard BC and FIPS BC perform cert generation. */ 
5547
5648public  class  KeyStoreProviderTest  {
5749  private  static  final  SecureRandom  RND  = new  SecureRandom ();
@@ -72,6 +64,7 @@ public class KeyStoreProviderTest {
7264
7365  @ Before 
7466  public  void  setup () throws  Exception  {
67+     Security .addProvider (new  BouncyCastleProvider ());
7568    ks  = KeyStore .getInstance (KeyStore .getDefaultType ());
7669    ks .load (null , PASSWORD );
7770  }
@@ -286,26 +279,24 @@ private void addPublicEntry(final String alias) throws GeneralSecurityException,
286279  }
287280
288281  private  X509Certificate  generateCertificate (final  KeyPair  pair , final  String  alias )
289-       throws  GeneralSecurityException , IOException  {
290-     final  X509CertInfo  info  = new  X509CertInfo ();
291-     final  X500Name  name  = new  X500Name ("dc="  + alias );
292-     info .set (X509CertInfo .SERIAL_NUMBER , new  CertificateSerialNumber (new  BigInteger (256 , RND )));
293-     info .set (X509CertInfo .SUBJECT , name );
294-     info .set (X509CertInfo .ISSUER , name );
295-     info .set (
296-         X509CertInfo .VALIDITY ,
297-         new  CertificateValidity (
298-             Date .from (Instant .now ().minus (1 , ChronoUnit .DAYS )),
299-             Date .from (Instant .now ().plus (730 , ChronoUnit .DAYS ))));
300-     info .set (X509CertInfo .KEY , new  CertificateX509Key (pair .getPublic ()));
301-     info .set (
302-         X509CertInfo .ALGORITHM_ID ,
303-         new  CertificateAlgorithmId (new  AlgorithmId (AlgorithmId .sha256WithRSAEncryption_oid )));
304- 
305-     final  X509CertImpl  cert  = new  X509CertImpl (info );
306-     cert .sign (pair .getPrivate (), AlgorithmId .sha256WithRSAEncryption_oid .toString ());
307- 
308-     return  cert ;
282+       throws  GeneralSecurityException  {
283+     final  X509Certificate  certificate ;
284+ 
285+     // Generate self-signed certificate 
286+     final  X509V3CertificateGenerator  certGen  = new  X509V3CertificateGenerator ();
287+     final  X500Principal  dnName  = new  X500Principal ("dc="  + alias );
288+ 
289+     certGen .setSerialNumber (new  BigInteger (256 , new  SecureRandom ()));
290+     certGen .setIssuerDN (dnName );
291+     certGen .setNotBefore (Date .from (Instant .now ().minus (1 , ChronoUnit .DAYS )));
292+     certGen .setNotAfter (Date .from (Instant .now ().plus (730 , ChronoUnit .DAYS )));
293+     certGen .setSubjectDN (dnName );
294+     certGen .setPublicKey (pair .getPublic ());
295+     certGen .setSignatureAlgorithm ("SHA256WithRSA" );
296+ 
297+     certificate  = certGen .generate (pair .getPrivate ());
298+ 
299+     return  certificate ;
309300  }
310301
311302  private  void  copyPublicPart (final  KeyStore  src , final  KeyStore  dst , final  String  alias )
0 commit comments