问题描述
我正在制作签名和验证的方法,需要从密钥库中制作相互对应的密钥。我用于签名和验证的方法从我的 JCEKS 密钥库中获取密钥,并将使用它们来签名和验证签名。
我尝试了使用常规密钥对生成的签名/验证方法,它似乎通过在验证时返回 true 来工作,但是当我尝试使用密钥库中的密钥时,它返回 false。
public Certificate[] generateCertificateChain() throws IOException,CertificateException {
CertificateFactory cf = CertificateFactory.getInstance("X509");
Resource certRes = resourceLoader.getResource("file:cert.pem");
X509Certificate cert = (X509Certificate) cf.generateCertificate(certRes.getInputStream());
Certificate[] certificateChain = {cert};
return certificateChain;
}
KeyFactory factory = KeyFactory.getInstance("RSA");
RSAPublicKeySpec rsaPublicKeySpec = new RSAPublicKeySpec(publicKeyData.getModulusInteger(),publicKeyData.getPublicExponentInteger());
PublicKey publicKey = factory.generatePublic(rsaPublicKeySpec);
keyStore.setKeyEntry(alias,publicKey.getEncoded(),generateCertificateChain());
OutputStream writeStream = new FileOutputStream(keyStorePath);
keyStore.store(writeStream,keyStorePassword);
我可能生成和存储我的证书有误。这是我现在不使用上述两种方法而尝试的方法:这里我收到错误消息:由:java.security.cert.CertificateException:无法初始化,java.io.IOException:DER长度的短读
@Override
public void storePublicKey(String alias,RsaPublicKeyData publicKeyData)
throws CertificateException,IOException,NoSuchAlgorithmException,InvalidKeySpecException,KeyStoreException {
KeyFactory factory = KeyFactory.getInstance("RSA");
RSAPublicKeySpec rsaPublicKeySpec = new RSAPublicKeySpec(publicKeyData.getModulusInteger(),publicKeyData.getPublicExponentInteger());
PublicKey publicKey = factory.generatePublic(rsaPublicKeySpec);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(publicKey.getEncoded()));
keyStore.setCertificateEntry(alias,cert);
OutputStream writeStream = new FileOutputStream(keyStorePath);
keyStore.store(writeStream,keyStorePassword);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)