使用 for java keystore 从 RSA 公钥生成证书的问题

问题描述

我正在制作签名和验证的方法,需要从密钥库中制作相互对应的密钥。我用于签名和验证的方法从我的 JCEKS 密钥库中获取密钥,并将使用它们来签名和验证签名。

我尝试了使用常规密钥对生成的签名/验证方法,它似乎通过在验证时返回 true 来工作,但是当我尝试使用密钥库中的密钥时,它返回 false。

这是我之前尝试过的一个返回 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 (将#修改为@)