Вопрос

Я создал сертификат, в основном прямо со страницы набора KeyTool:

keytool -genkey -dname "cn = что-нибудь, ou = что-нибудь, o = что-нибудь, c = нас" -алиас Бизнес -keypass kpi135 -keystore c: mykeystore -storepass ab987c -valitelity 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. Это делает Упомяните, что вы, по-видимому, создаете ключ, используя keyysig rsa и -siGalg RSA, однако, когда я пробую эти флаги при создании сертификата, который я получаю:

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

enter code here
Это было полезно?

Решение

На самом деле, кажется, вы можете добавить «-Keyalg RSA» в команду keygen, которая утверждает проблему несоответствия. Я был неправильно попробовать как -keyalg и -Sigalg в одной и той же команде Keygen. Код выше сейчас выполняется без исключения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top