سؤال

لقد قمت بإنشاء شهادة بشكل أساسي من صفحة مثال KeyTool:

keytool -genkey -dname "cn = أي شيء ، ou = أي شيء ، o = أي شيء ، c = us" -alias business -keypass KPI135 -Keystore c: mykeystore -storepass ab987c -valitide 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
هل كانت مفيدة؟

المحلول

في الواقع يبدو أنه يمكنك إضافة "-keyalg RSA" إلى أمر Keygen الذي يخفف من قضية عدم التطابق. كنت أحاول بشكل غير صحيح -keyalg و -sigalg في نفس أمر Keygen. يتم تنفيذ الرمز أعلاه الآن دون استثناءات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top