2017-01-06 21 views
0

키 스토어 용으로 자체 CSR을 생성하려고하는데 잘 수행되지 않아 오류가 혼동을 일으 킵니다. 여기 내 코드입니다 : X509 인증서를 생성하는 중 "데이터 ID가 개체 ID가 아닙니다 (태그 = 49)"입니다.

import java.io.BufferedInputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.security.GeneralSecurityException; 
import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.KeyStore; 
import java.security.KeyStoreException; 
import java.security.NoSuchAlgorithmException; 
import java.security.cert.CertificateException; 
import java.security.cert.CertificateFactory; 
import java.security.cert.X509Certificate; 
import java.security.interfaces.RSAPrivateKey; 
import java.security.interfaces.RSAPublicKey; 
import org.bouncycastle.asn1.x500.X500Name; 
import org.bouncycastle.asn1.x500.X500NameBuilder; 
import org.bouncycastle.asn1.x500.style.BCStyle; 
import org.bouncycastle.openssl.PEMWriter; 
import org.bouncycastle.operator.ContentSigner; 
import org.bouncycastle.operator.OperatorCreationException; 
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; 
import org.bouncycastle.pkcs.PKCS10CertificationRequest; 
import org.bouncycastle.pkcs.PKCS10CertificationRequestBuilder; 
import org.bouncycastle.pkcs.jcajce.JcaPKCS10CertificationRequestBuilder; 

public class CreateKeyTest { 

    public static void main(String[] args) throws OperatorCreationException, IOException, GeneralSecurityException { 
    KeyPairGenerator kpg; 
    KeyPair kp; 
    RSAPublicKey pubKey; 
    RSAPrivateKey privKey; 

    FileOutputStream out; 
    KeyStore ks; 
    FileInputStream in; 
    FileInputStream bFis; 

    try { 
     ks = KeyStore.getInstance("JKS"); 

     kpg = KeyPairGenerator.getInstance("RSA"); 
     kpg.initialize(1024); 
     kp = kpg.generateKeyPair(); 
     pubKey = (RSAPublicKey) kp.getPublic(); 
     privKey = (RSAPrivateKey) kp.getPrivate(); 

     // generate CSR 
     ContentSigner sign = new JcaContentSignerBuilder("SHA1withRSA").build(privKey); 

     X500NameBuilder nBuilder = new X500NameBuilder(); 
     nBuilder.addRDN(BCStyle.CN, "TestCSR"); 
     nBuilder.addRDN(BCStyle.C, "ER"); 
     nBuilder.addRDN(BCStyle.E, "[email protected]"); 
     X500Name name = nBuilder.build(); 

     PKCS10CertificationRequestBuilder cerReq = new JcaPKCS10CertificationRequestBuilder(name, pubKey); 
     PKCS10CertificationRequest request = cerReq.build(sign); 

     PEMWriter pWr = new PEMWriter(new FileWriter(new File("D:\\test.csr"))); 
     pWr.writeObject(request); 
     pWr.flush(); 
     pWr.close(); 

     bFis = new FileInputStream("D:\\test.csr"); 
     BufferedInputStream ksbufin = new BufferedInputStream(bFis); 
     X509Certificate certificate = (X509Certificate) CertificateFactory.getInstance("X.509") 
       .generateCertificate(ksbufin); 

     ks.setKeyEntry("RSA_key", kp.getPrivate(), "changeit".toCharArray(), 
       new java.security.cert.Certificate[] { certificate }); 

     out = new FileOutputStream("key.store"); 
     ks.store(out, "changeit".toCharArray()); 

     System.out.println("New Keystore Generated"); 
     out.close(); 
    } catch (KeyStoreException | IOException | CertificateException | NoSuchAlgorithmException 
      | OperatorCreationException e) { 
     System.out.println(e.getMessage()); 
     e.printStackTrace(); 
    } 
} 
} 

내가 그것을 실행

, 그것은 나에게 예외 보여 주었다 : X509.ObjectIdentifier() -- data isn't an object ID (tag = 49)를, 그것은 generateCertificate(ksbufin)에 백 추적 할 수 있습니다. 하지만 test.cer을 확인했는데 거기에 인증서 데이터가 있고 그 예외 메시지가 나 혼란 스럽다는 것을 알지 못합니다. ( object ID? tag = 49? 내 코드에서 ID를 생성하지 못했습니다.).

누구든지이 진흙에서 나를 도울 수 있습니까?

답변

0

오류 메시지가 정확한지,test.csr인증서 포함되어 있지 않습니다. PKCS10CertificationRequest을 사용하여 빌드 했으므로 인증서 서명 요청 (CSR)이 포함되어 있습니다.

개인 및 공개 키와 CSR 키 쌍을 생성했습니다. CSR은 인증 기관 (CA)에 대한 인증서 요청입니다. 여기에는 공개 키와 인증서의 일부 예상 특성 (CN, C, OU 등)이 들어 있습니다. CSR은 개인 키로 서명되어 CA로 보내야합니다. CA는 공개 키를 추출하고 인증서를 생성하며 서명합니다. 당신이 인증을 원하는 경우에 Certificate enrollment process

를 참조 당신이 X509.ObjectIdentifier()`있다고는 CA

+0

흠하여 인증서를 서명하는 데 필요한 - 데이터 오브젝트 ID가 아닌 (태그 = 49) '처음 엔 이런 말을하지 않는 것 같아. 이유를 더 명확하게 쓰지 않는 이유가 궁금합니다. – Kaninchen

+0

음, 1 조각이 없어 보이는 것 같습니다. 내 혼란을 해결해 주셔서 감사합니다. – Kaninchen