証明書の公開鍵を検証しようとしています。次のコマンドを使用して、証明書がキーストアにインポートされました。
keytool -importcert -file cert.cer -keystore kstore.jks -alias mycert -storepass changeit
これは、公開鍵を検証するために使用する Java コードです。
File keyStore = new File("kstore.jks");
String keyStorePassword = "changeit";
KeyStore ks = null;
try {
ks = KeyStore.getInstance("jks");
ks.load(keyStore.toURI().toURL().openStream(), keyStorePassword.toCharArray());
} catch (Exception e) {
e.printStackTrace();
}
try {
Certificate cert = ks.getCertificate("mycert");
PublicKey pk = cert.getPublicKey();
cert.verify(pk);
//cert.verify(pk, "SunRsaSign");
System.out.println("Keys verified");
} catch (Exception e) {
e.printStackTrace();
}
私が得る例外は次のとおりです。
java.security.SignatureException: Signature does not match.
at sun.security.x509.X509CertImpl.verify(X509CertImpl.java:446)
at sun.security.x509.X509CertImpl.verify(X509CertImpl.java:389)
at VerifyEBXMLSignature.runIt3(VerifyEBXMLSignature.java:62)
at VerifyEBXMLSignature.main(VerifyEBXMLSignature.java:41)
証明書には公開鍵が含まれていますが、私は秘密鍵にアクセスできません。キーストアにインポートしたこの証明書に対して公開鍵を検証することはまったく可能ですか? 公開鍵は証明書自体から取得されるため、正しいはずです。
証明書について他に何を探す必要がありますか?
証明書に関する情報をさらに入手しました。証明書は秘密鍵からエクスポートされます。その過程で何か間違ったことはありますか?