2017-07-10 1 views
1

Je veux générer des paires de certificats et de clés x509 pour mon test unitaire.Comment créer X509Certificate avec des paires de clés sans sun.security

private Pair<String, String> generateTokenAndCertificate() { 
    try { 

     //Configure generator 
     CertAndKeyGen certGen = new CertAndKeyGen("RSA", "SHA256WithRSA"); 
     certGen.generate(2048); 
     long validSecs = (long) 365 * 24 * 60 * 60; // valid for one year 


     //Token 
     CharSequence content = "test"; 
     Signer signer = new RsaSigner((RSAPrivateKey) certGen.getPrivateKey()); 
     String token = JwtHelper.encode(content, signer).getEncoded(); 

     //Certificate 
     X500Name data = new X500Name("CN=Test Application,O=Company,L=City,C=DE"); 
     X509Certificate cert = certGen.getSelfCertificate(data, validSecs); 
     Base64 encoder = new Base64(); 
     String certificate = X509Factory.BEGIN_CERT + "\n"; 
     certificate += encoder.encode(cert.getEncoded()); 
     certificate += X509Factory.END_CERT + "\n"; 

     return new Pair<>(token, certificate); 
    } catch (Exception e) { 
     return null; 
    } 
} 

Le problème est que je l'ai utilisé

import sun.security.provider.X509Factory; 
import sun.security.tools.keytool.CertAndKeyGen; 
import sun.security.x509.X500Name; 

Et obtenez des erreurs comme celles-ci:

error: package sun.security.tools.keytool does not exist

et:

error: cannot find symbol 
     CertAndKeyGen certGen = new CertAndKeyGen("RSA", "SHA256WithRSA"); 
     ^
symbol: class CertAndKeyGen 
location: class CertificationProviderSpecification 

Je sais que javac ne le fait pas charger plein rt.jar concernant ct.sym et je pourrais résoudre de telles erreurs par -XDignore.symbol.file ou Bouncy Castle. Mais est-il possible de générer ces par java.security ou org.springframework.security?

Répondre

0

Vous pouvez créer la paire de clés en utilisant uniquement java.security:

KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA"); 
gen.initialize(2048, SecureRandom.getInstance("SHA1PRNG")); 
KeyPair keyPair = gen.generateKeyPair(); 

Mais pour créer le certificat, vous devez utiliser sun.security classes.

Je ne l'ai jamais utilisé org.springframework.security mais bonne alternative pour créer des certificats est le Bouncy Castle API - vérifier à la classe org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder, il y a lots of online examples.