2121
2222import com .cloud .utils .HttpUtils ;
2323import org .apache .log4j .Logger ;
24+ import org .bouncycastle .jce .provider .BouncyCastleProvider ;
25+ import org .bouncycastle .x509 .X509V1CertificateGenerator ;
2426import org .joda .time .DateTime ;
2527import org .opensaml .Configuration ;
2628import org .opensaml .common .SAMLVersion ;
5759import org .w3c .dom .Element ;
5860import org .xml .sax .SAXException ;
5961
62+ import javax .security .auth .x500 .X500Principal ;
6063import javax .xml .parsers .DocumentBuilder ;
6164import javax .xml .parsers .DocumentBuilderFactory ;
6265import javax .xml .parsers .ParserConfigurationException ;
6669import java .io .StringWriter ;
6770import java .math .BigInteger ;
6871import java .net .URLEncoder ;
72+ import java .security .InvalidKeyException ;
73+ import java .security .KeyPair ;
74+ import java .security .KeyPairGenerator ;
75+ import java .security .NoSuchAlgorithmException ;
76+ import java .security .NoSuchProviderException ;
6977import java .security .SecureRandom ;
78+ import java .security .Security ;
79+ import java .security .SignatureException ;
80+ import java .security .cert .CertificateEncodingException ;
81+ import java .security .cert .X509Certificate ;
82+ import java .util .Date ;
7083import java .util .zip .Deflater ;
7184import java .util .zip .DeflaterOutputStream ;
7285
@@ -88,7 +101,7 @@ public static Boolean checkSAMLUserId(String uuid) {
88101 }
89102
90103 public static String generateSecureRandomId () {
91- return new BigInteger (130 , new SecureRandom ()).toString (32 );
104+ return new BigInteger (160 , new SecureRandom ()).toString (32 );
92105 }
93106
94107 public static AuthnRequest buildAuthnRequestObject (String spId , String idpUrl , String consumerUrl ) {
@@ -194,4 +207,26 @@ public static Response decodeSAMLResponse(String responseMessage)
194207 return (Response ) unmarshaller .unmarshall (element );
195208 }
196209
210+ public static X509Certificate generateRandomX509Certification () throws NoSuchAlgorithmException , NoSuchProviderException , CertificateEncodingException , SignatureException , InvalidKeyException {
211+ Date validityBeginDate = new Date (System .currentTimeMillis () - 24 * 60 * 60 * 1000 );
212+ Date validityEndDate = new Date (System .currentTimeMillis () + 2 * 365 * 24 * 60 * 60 * 1000 );
213+
214+ Security .addProvider (new BouncyCastleProvider ());
215+ KeyPairGenerator keyPairGenerator = KeyPairGenerator .getInstance ("RSA" , "BC" );
216+ keyPairGenerator .initialize (1024 , new SecureRandom ());
217+ KeyPair keyPair = keyPairGenerator .generateKeyPair ();
218+
219+ X500Principal dnName = new X500Principal ("CN=John Doe" );
220+ X509V1CertificateGenerator certGen = new X509V1CertificateGenerator ();
221+ certGen .setSerialNumber (BigInteger .valueOf (System .currentTimeMillis ()));
222+ certGen .setSubjectDN (dnName );
223+ certGen .setIssuerDN (dnName ); // use the same
224+ certGen .setNotBefore (validityBeginDate );
225+ certGen .setNotAfter (validityEndDate );
226+ certGen .setPublicKey (keyPair .getPublic ());
227+ certGen .setSignatureAlgorithm ("SHA256WithRSAEncryption" );
228+
229+ return certGen .generate (keyPair .getPrivate (), "BC" );
230+ }
231+
197232}
0 commit comments