如何从 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