我最初拥有一个受密码保护的PEM文件,其中包含一个使用BouncyCastle读入Java应用程序的私钥。 PEM文件以
开头-----开始RSA私钥-----
这让我相信它是PKCS#1格式。我想生成一个二进制文件并将私钥读入Java程序,而不是使用PEM文件。根据{{3}},我使用以下 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文件?
答案 0 :(得分:0)
它最终成为一个正在改变private.der
文件路径的maven问题。使用绝对路径解决了这个问题。