Java - 从 .DER 文件加载私钥

Java - loading private key from .DER file

我最初有一个受密码保护的 PEM 文件,其中包含使用 BouncyCastle 读入 Java 应用程序的私钥。 PEM 文件以

开头

-----开始 RSA 私钥-----

这让我相信它是 PKCS#1 格式。我不想使用 PEM 文件,而是想生成一个二进制文件并将私钥读入 Java 程序。根据 here,我使用以下 openssl 代码生成 DER 文件:

openssl pkcs8 -topk8 -nocrypt -in private.pem -outform der -out private.der

然后使用此 Java 代码尝试读取 DER 文件:

Path path = Paths.get(privateKeyLocation);
        byte[] byteArray = Files.readAllBytes(path);

        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(byteArray);

        PrivateKey privKey;
        try {
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            privKey = keyFactory.generatePrivate(keySpec);
        } catch (InvalidKeySpecException e) {
            logger.error("error with jwt", e);
            return null;
        } catch (NoSuchAlgorithmException e) {
            logger.error("error with jwt", e);
            return null;
        }

但我 运行 遇到了这个错误:

java.lang.NoClassDefFoundError: com/rsa/asn1/ASN_Exception
at com.rsa.jsafe.provider.JS_KeyFactory.b(Unknown Source)
at com.rsa.jsafe.provider.JS_KeyFactory.engineGeneratePrivate(Unknown Source)
at java.security.KeyFactory.generatePrivate(KeyFactory.java:372)
...

我不确定是什么导致了这个错误,想知道是否有更好的方法来使用 BouncyCastle 读取 DER 文件?

它最终成为一个 Maven 问题,它正在更改 private.der 文件的路径。使用绝对路径解决了这个问题。