2010-03-11 3 views
4

일부 X509 인증서에 서명하려고합니다. 내 루트 개인 키는 ECDSA secp384r1입니다. 나는 탄력성을 사용하고 있습니다. 인증서 서명을 생성 할 때 사용 된 Signature 클래스가 내 ECDSA 키를 인식 할 수 없다는 것입니다.ECDSA 키를 사용할 때 서명 된 x509 가져 오기

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

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) 

문제는이 시점에서 완전히 잃어버린 것입니다. 인증서 생성기에서 서명 된 인증서를 제공하는 방법을 모르겠습니다. 누구든지 내가 뭘 잘못하고 있는지 알 수 있습니까?

답변

2

POM에서 삭제되지 않았고 Bouncycastle의 잘못된 버전이 사용되도록 분류 된 몇 가지 오래된 병을 추적했습니다.

관련 문제