Java - 从 加载私钥.德尔文件



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

-----开始 RSA 私钥

-----这让我相信它是 PKCS#1 格式。我想生成一个二进制文件并将私钥读取到 Java 程序中,而不是使用 PEM 文件。根据这里,我使用以下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文件的路径。使用绝对路径解决了这个问题。

最新更新