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