2013-06-30 5 views
2

JarSigner와 함께 사용할 인증서가있는 키 스토어를 생성하려고합니다. 여기 내 코드입니다 :프로그래밍 방식으로 jarsigner 용 키 스토어 작성

System.out.println("Keystore generation..."); 

    Security.addProvider(new BouncyCastleProvider()); 

    String domainName = "example.org"; 

    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); 
    SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN"); 
    keyGen.initialize(1024, random); 
    KeyPair pair = keyGen.generateKeyPair(); 

    X509V3CertificateGenerator v3CertGen = new X509V3CertificateGenerator(); 

    int serial = new SecureRandom().nextInt(); 

    v3CertGen.setSerialNumber(BigInteger.valueOf(serial < 0 ? -1 * serial : serial)); 
    v3CertGen.setIssuerDN(new X509Principal("CN=" + domainName + ", OU=None, O=None L=None, C=None")); 
    v3CertGen.setNotBefore(new Date(System.currentTimeMillis() - 1000L * 60 * 60 * 24 * 30)); 
    v3CertGen.setNotAfter(new Date(System.currentTimeMillis() + (1000L * 60 * 60 * 24 * 365*10))); 
    v3CertGen.setSubjectDN(new X509Principal("CN=" + domainName + ", OU=None, O=None L=None, C=None")); 

    v3CertGen.setPublicKey(pair.getPublic()); 
    v3CertGen.setSignatureAlgorithm("MD5WithRSAEncryption"); 

    X509Certificate PKCertificate = v3CertGen.generateX509Certificate(pair.getPrivate()); 

    FileOutputStream fos = new FileOutputStream("/Users/dmitrysavchenko/testCert.cert"); 
    fos.write(PKCertificate.getEncoded()); 
    fos.close(); 



    KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 

    char[] password = "123".toCharArray(); 
    ks.load(null, password); 

    ks.setCertificateEntry("hive", PKCertificate); 

    fos = new FileOutputStream("/Users/dmitrysavchenko/hive-keystore.pkcs12"); 
    ks.store(fos, password); 
    fos.close(); 

내가이 키 스토어 내 JAR 서명려고 할 때 그것은 작동하지만, 나는 다음과 같은 오류 얻을 :

jarsigner: Certificate chain not found for: hive. hive must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain. 

내가 거기 있어야한다는 발견했습니다를 개인 키,하지만 인증서에 추가하는 방법을 모르겠습니다. 너 나 좀 도와 줄 수있어?

답변

1

이것은 당신이 당신의 새로운 키 스토어에 개인 키를 추가하는 방법입니다 :

... 
    char[] password = "123".toCharArray(); 
    ks.load(null, password); 

    PrivateKeyEntry entry = new PrivateKeyEntry(pair.getPrivate(), 
      new java.security.cert.Certificate[]{PKCertificate}); 
    ks.setEntry("hive",entry , new KeyStore.PasswordProtection("123".toCharArray())); 

    fos = new FileOutputStream("hive-keystore.pkcs12"); 
    ks.store(fos, password); 
    fos.close(); 

내가 jarsigner의 그것을 시도하고 그것을 잘해야한다 그래서, 오류를주지 않았다.

+0

매력처럼 작동합니다. – skayred

관련 문제