2010-06-30 22 views
3

J'ai créé un certificat de la page d'exemple keytool essentiellement droite:Impossible de signer une fouille sig utilisant java/keytool

keytool -genkey -dname « cn = Tout, ou = Ne importe quoi, o = Tout , c = US » activité -alias -keypass kpi135 -keystore C: \ mykeystore -storepass ab987c de -validity 1095

Je suis en train d'accéder à ce certificat et utiliser la partie clé privée pour signer numériquement une partie du texte s'authentifier auprès d'un tiers. Voici le code que je tente:

//Add bouncyCastle as a provider 
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 

    KeyStore keystore = KeyStore.getInstance("JKS"); 
    keystore.load(new FileInputStream("C:\\mykeystore"), "ab987c".toCharArray()); 
    Signature sig = Signature.getInstance("MD5withRSA", "BC"); 
    PrivateKey privateKey = (PrivateKey)keystore.getKey("business", "kpi135".toCharArray()); //Exception here 
    sig.initSign(privateKey); 
    sig.update("myUID__myNonce".getBytes()); 
    byte[] digitalSignature = sig.sign(); 

    System.out.println("Signature Formulated: " + digitalSignature); 

Je reçois l'exception suivante:

java.security.InvalidKeyException: Supplied key (sun.security.provider.DSAPrivat 
eKey) is not a RSAPrivateKey instance 
     at org.bouncycastle.jce.provider.JDKDigestSignature.engineInitSign(Unkno 
wn Source) 
     at java.security.Signature$Delegate.engineInitSign(Signature.java:1095) 
     at java.security.Signature.initSign(Signature.java:480) 
     at MainClass.<init>(MainClass.java:15) 
     at MainClass.main(MainClass.java:28) 

Je suppose que c'est parce que je l'ai en quelque sorte créé le certificat avec le mauvais type de clé, mais je Je ne suis pas sûr que je trouve ce dont j'ai besoin en creusant à travers la page keytool. Il fait mention que vous pouvez apparemment générer une clé RSA en utilisant -keysig et -sigalg RSA mais lorsque je tente ces drapeaux lors de la création d'un certificat que je reçois:

keytool error: java.security.NoSuchAlgorithmException: RSA Signature not availab 
le 

enter code here 

Répondre

4

En fait, il semble que vous pouvez ajouter « -keyalg RSA "à la commande keygen qui atténue le problème de discordance. J'ai essayé incorrectement à la fois -keyalg et -sigalg dans la même commande keygen. Le code ci-dessus s'exécute maintenant sans exceptions.