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
文件的路径。使用绝对路径解决了这个问题。
我最初有一个受密码保护的 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
文件的路径。使用绝对路径解决了这个问题。