2010-06-30 36 views
3

我從keytool的示例頁面創建的證書基本上直:無法登錄掏SIG採用的Java /密鑰工具

密鑰工具-genkey -dname「CN =什麼,OU =什麼,O =什麼,C = US」 -alias業務-keypass kpi135 -keystore C:\ mykeystore -storepass ab987c -validity 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頁面找到我需要的。它確實提到,創建證書我得到時,你可以使用明顯RSA -keysig但是和RSA -sigalg生成密鑰,當我嘗試這些標誌:

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

enter code here 

回答

4

其實這似乎可以添加「-keyalg RSA 「以緩解不匹配問題的keygen命令。我在同一個keygen命令中錯誤地嘗試了-keyalg和-sigalg。上面的代碼現在執行無例外。