4

基本的に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ページを調べて必要なものが見つからないかどうかはわかりません。-keysigRSAと-sigalgRSAを使用してキーを生成できるようですが、証明書を作成するときにこれらのフラグを試すと、次のようになります。

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

enter code here
4

1 に答える 1

5

実際には、keygenコマンドに「-keyalgRSA」を追加して、不一致の問題を軽減できるようです。同じkeygenコマンドで-keyalgと-sigalgの両方を誤って試していました。上記のコードは例外なく実行されるようになりました。

于 2010-06-30T19:33:19.693 に答える