如何从 Java 字符串中加载 EC 私钥?
How to load EC private key from a Java string?
我有一个 EC 私钥存储在 Java 字符串中。我正在使用以下代码读取字符串并将其转换为我需要生成 SHA256withECDSA 签名的 PrivateKey 对象。
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
public static PrivateKey getPrivateKey() {
try {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Reader rdr = new StringReader("-----BEGIN EC PRIVATE KEY-----\n" +
"<line1>\n" +
"<line2>\n" +
"<line3>\n" +
"-----END EC PRIVATE KEY-----\n");
Object parsed = new PEMParser(rdr).readObject();
KeyPair pair = new JcaPEMKeyConverter().getKeyPair((org.bouncycastle.openssl.PEMKeyPair) parsed);
return pair.getPrivate();
} catch (IOException e) {
logger.error("IOException generating private key {} ", e);
}
return null;
}
我能够使用 IntelliJ 中的单元测试成功生成私钥。但是,当我在 Tomcat 上部署 war 时,此代码抛出以下异常:
class“org.bouncycastle.asn1.pkcs.RSAPublicKey”的签名者信息与同一包中其他class的签名者信息不匹配
Maven 依赖树输出:
mvn dependency:tree | grep -i "bouncycastle"
[INFO] | | | +- org.bouncycastle:bcmail-jdk15on:jar:1.49:compile
[INFO] | | | +- org.bouncycastle:bcprov-jdk15on:jar:1.49:compile
[INFO] | | | +- org.bouncycastle:bcpkix-jdk15on:jar:1.49:compile
[INFO] | | | | +- org.bouncycastle:bcmail-jdk15:jar:1.45:compile
[INFO] | | | | +- org.bouncycastle:bcprov-jdk15:jar:1.45:compile
我将其中一个版本添加到 pom 排除项中。仍然面临同样的问题:
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcmail-jdk15</artifactId>
</exclusion>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15</artifactId>
</exclusion>
感谢任何指点。
谢谢。
最终从 war 包装中排除不需要的版本解决了这个问题。在我的 pom 中添加了 'packagingExcludes'。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<packagingExcludes>
WEB-INF/lib/bcmail-jdk15-1.45.jar,
WEB-INF/lib/bcprov-jdk15-1.45.jar
</packagingExcludes>
</configuration>
</plugin>
参考:https://maven.apache.org/plugins/maven-war-plugin/examples/including-excluding-files-from-war.html
我有一个 EC 私钥存储在 Java 字符串中。我正在使用以下代码读取字符串并将其转换为我需要生成 SHA256withECDSA 签名的 PrivateKey 对象。
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
public static PrivateKey getPrivateKey() {
try {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Reader rdr = new StringReader("-----BEGIN EC PRIVATE KEY-----\n" +
"<line1>\n" +
"<line2>\n" +
"<line3>\n" +
"-----END EC PRIVATE KEY-----\n");
Object parsed = new PEMParser(rdr).readObject();
KeyPair pair = new JcaPEMKeyConverter().getKeyPair((org.bouncycastle.openssl.PEMKeyPair) parsed);
return pair.getPrivate();
} catch (IOException e) {
logger.error("IOException generating private key {} ", e);
}
return null;
}
我能够使用 IntelliJ 中的单元测试成功生成私钥。但是,当我在 Tomcat 上部署 war 时,此代码抛出以下异常: class“org.bouncycastle.asn1.pkcs.RSAPublicKey”的签名者信息与同一包中其他class的签名者信息不匹配
Maven 依赖树输出:
mvn dependency:tree | grep -i "bouncycastle"
[INFO] | | | +- org.bouncycastle:bcmail-jdk15on:jar:1.49:compile
[INFO] | | | +- org.bouncycastle:bcprov-jdk15on:jar:1.49:compile
[INFO] | | | +- org.bouncycastle:bcpkix-jdk15on:jar:1.49:compile
[INFO] | | | | +- org.bouncycastle:bcmail-jdk15:jar:1.45:compile
[INFO] | | | | +- org.bouncycastle:bcprov-jdk15:jar:1.45:compile
我将其中一个版本添加到 pom 排除项中。仍然面临同样的问题:
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcmail-jdk15</artifactId>
</exclusion>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15</artifactId>
</exclusion>
感谢任何指点。
谢谢。
最终从 war 包装中排除不需要的版本解决了这个问题。在我的 pom 中添加了 'packagingExcludes'。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<packagingExcludes>
WEB-INF/lib/bcmail-jdk15-1.45.jar,
WEB-INF/lib/bcprov-jdk15-1.45.jar
</packagingExcludes>
</configuration>
</plugin>
参考:https://maven.apache.org/plugins/maven-war-plugin/examples/including-excluding-files-from-war.html