Я создал сертификат в основном прямо со страницы примера keytool:
keytool -genkey -dname "cn = Anything, ou = Anything, o = Anything, c = US" -alias business -keypass kpi135 -keystore C: \ mykeystore -storepass ab987c -действительность 1095
Я пытаюсь получить доступ к этому сертификату и использовать часть секретного ключа для цифровой подписи части текста для аутентификации третьей стороной. Ниже приведен код, который я пытаюсь:
//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);
Я получаю следующее исключение:
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)
Я предполагаю, что это потому, что я каким-то образом создал сертификат с неверным типом ключа, но я не уверен, что нашел то, что мне нужно, покопавшись на странице keytool. В упоминается, что вы, очевидно, можете сгенерировать ключ, используя -keysig RSA и -sigalg RSA, однако, когда я пробую эти флаги при создании сертификата, я получаю:
keytool error: java.security.NoSuchAlgorithmException: RSA Signature not availab
le
enter code here