문제

X509 인증서에 서명하려고합니다. 내 루트 개인 키는 ECDSA SECP384R1입니다. 나는 탄력 성을 사용하고 있습니다. 발생하는 것은 인증서 서명을 생성 할 때 사용 된 서명 클래스가 내 ECDSA 키를 이해할 수 없다는 것입니다.

생성하는 코드는 다음과 같습니다.

    X509V3CertificateGenerator v3CertGen = new X509V3CertificateGenerator();
    v3CertGen.setSerialNumber(BigInteger.valueOf(serialNumber));
    v3CertGen.setIssuerDN(issuerPrincipal);
    v3CertGen.setNotBefore(notBefore);
    v3CertGen.setNotAfter(notAfter);
    v3CertGen.setSubjectDN(subjectDN);
    v3CertGen.setPublicKey(publicKey);
    v3CertGen.setSignatureAlgorithm(CERT_SIGNATURE_ALGORITHM); // this is ECDSAWITHSHA1
    X509Certificate cert = v3CertGen.generate(privateKey, BOUNCY_CASTLE_PROVIDER); // "BC"

이것의 출력은 다음과 같습니다.

java.security.InvalidKeyException: can't identify DSA private key.
    at org.bouncycastle.jce.provider.DSAUtil.generatePrivateKeyParameter(Unknown Source)
    at org.bouncycastle.jce.provider.JDKDSASigner.engineInitSign(Unknown Source)
    at java.security.Signature.initSign(Signature.java:480)
    at org.bouncycastle.x509.X509Util.calculateSignature(Unknown Source)
    at org.bouncycastle.x509.X509V3CertificateGenerator.generate(Unknown Source)
    at org.bouncycastle.x509.X509V3CertificateGenerator.generate(Unknown Source)
    at com.snip.utils.CertificateUtility.generateAndSignCertificate(CertificateUtility.java:147)

Bouncycastle 소스 코드를 읽음 으로써이 문제를 추적하고 다음 코드 스 니펫으로 재생산합니다.

Signature sig = Signature.getInstance(CERT_SIGNATURE_ALGORITHM, BOUNCY_CASTLE_PROVIDER);
System.out.println(sig.getAlgorithm());
System.out.println(sig.toString());
System.out.println(sig.getClass().getName());
try
{
    sig.initSign(privateKey);
    System.out.println(sig.toString());
} catch (Exception e) {
    e.printStackTrace();
}

출력을 생성합니다.

SHA1withECDSA
Signature object: SHA1withECDSA<not initialized>
org.bouncycastle.jce.provider.JDKDSASigner$ecDSA
java.security.InvalidKeyException: can't identify DSA private key.
        at org.bouncycastle.jce.provider.DSAUtil.generatePrivateKeyParameter(Unknown Source)
        at org.bouncycastle.jce.provider.JDKDSASigner.engineInitSign(Unknown Source)
        at java.security.Signature.initSign(Signature.java:480)
        at com.snip.utils.CertificateUtility.<init>(CertificateUtility.java:99)

문제는이 시점에서 내가 완전히 잃어 버렸다는 것입니다. 인증서 생성기가 서명 된 인증서를 제공하는 방법을 모르겠습니다. 내가 무엇을 잘못하고 있는지에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

나는 POM에서 삭제되지 않았으며, 잘못된 버전의 Bouncycastle이 사용되도록하는 오래된 항아리로 추적했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top