无法使用java / keytool签署dig sig

时间:2010-06-30 16:07:32

标签: java security certificate x509certificate keytool

我基本上直接从keytool示例页面创建了证书:

  

keytool -genkey -dname“cn = Anything,ou = Anything,o = Anything,c = US”-alias business -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页面找到了我需要的东西。它确实提到您可以使用-keysig RSA和-sigalg RSA显然生成密钥但是当我在创建证书时尝试这些标记时,我得到:

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

enter code here

1 个答案:

答案 0 :(得分:4)

实际上,您似乎可以在keygen命令中添加“-keyalg RSA”,以缓解不匹配问题。我在同一个keygen命令中错误地尝试了-keyalg和-sigalg。上面的代码现在无异常地执行。