Webサービスから受信したデータ文字列とそのRSA-SHA256署名を検証しようとしていますが、証明書の秘密/公開鍵のロードが完全に停止しています。RSA SHA256署名が証明書から秘密鍵を取得できないことを確認しました
私はCERファイルから情報を取得するために、次のコードを持って、私はそれはエンコード典型的なbase64でではないのでそれはDER形式であると思う:
InputStream in = new FileInputStream(path1);
CertificateFactory factory = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) factory.generateCertificate(in);
System.out.println(cert.toString());
それは、証明書の全情報を出力します。
Version: V3
Subject: EMAILADDRESS=...
...
Algorithm: [SHA256withRSA]
...
が、試してみるには、ロードし、次のコードで、秘密鍵取得する場合:
KeyFactory kf = KeyFactory.getInstance("RSA");
X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(encodedKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec);
Signature sig = Signature.getInstance("SHA256withRSA");
sig.initVerify(bobPubKey);
sig.update(data_received);
sig.verify(signature_received);
を
私は次の例外keyFactory.generatePublic方法で
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format
を取得します。それがgeneratePrivateに変更された場合も同じ結果になります。
まず、秘密鍵と公開鍵は2つの非常に異なるものです。公開鍵で確認します。証明書には公開鍵が含まれています。検証部分には秘密鍵は含まれていません。第2に、証明書の読み方を理解したので、X509Certificateオブジェクトの['getPublicKey()'を呼び出すだけです(http://stackoverflow.com/questions/6358555/obtaining-public-key-from-certificate)。 –