2013-01-20 7 views
2

Java 코드가있는 자체 서명 된 인증서를 작성하여 KeyStore에 추가했습니다. 이제 개인 키와 인증서를 PEM 형식의 파일로 내보내려고합니다. 제 3 자 라이브러리없이이 작업을 수행 할 수 있습니까? 아래는 자기가 서명 한 인증서를 만들기 위해 사용하는 코드입니다.개인 키를 PEM 형식으로 변환하십시오.

public void createSelfSignedSSLCertificate() { 
    try {    
     final CertAndKeyGen keypair = new CertAndKeyGen("RSA", "SHA1WithRSA", null); 
     final X500Name x500Name = 
      new X500Name(commonName, organizationalUnit, organization, city, state, country); 
     keypair.generate(keysize); 
     final PrivateKey privKey = keypair.getPrivateKey(); 
     final X509Certificate[] chain = new X509Certificate[1]; 
     chain[0] = keypair.getSelfCertificate(x500Name, new Date(), validity * 24 * 60 * 60); 
     final String alias = JettySSLConfiguration.SSL_CERTIFICATE_ALIAS; 
     keyStore.setKeyEntry(alias, privKey, keyStorePassword.toCharArray(), chain); 
    } catch (final Exception e) { 
     // Handle Exception 
    }  
} 

키와 인증서를 PEM 형식의 파일로 내보내는 방법에 대한 제안은 정말 유용 할 것입니다.

+1

실제로 "PEM"형식은 없습니다. '----- BEGIN '과'----- END '으로 둘러싸인 base64가 인코딩 될 때 "PEM 형식"으로 설명되는 모든 종류의 암호화 구조가 있습니다. 당신은 당신이 원하는 것에 대해 구체적이어야합니다. –

+1

J2SE API의 일부가 아닌 내부 'sun. *'패키지 중 일부를 사용하는 대신 타사 라이브러리 사용을 고려해야합니다. – Bruno

답변

3

Certificate.getEncoded()Key.getEncoded()을 사용하여 DER을 얻고 기본 64 인코딩 및 머리글/바닥 글을 수동으로 수행합니다 (예 : DatatypeConverter.printBase64Binary() 또는 다른 방법을 사용하십시오. 예 :

certpem = "-----BEGIN CERTIFICATE-----\n" + 
      DatatypeConverter.printBase64Binary(chain[0].getEncoded())) + 
      "\n-----END CERTIFICATE-----\n"; 
keypem = "-----BEGIN RSA PRIVATE KEY-----\n" + 
      DatatypeConverter.printBase64Binary(privKey.getEncoded())) + 
      "\n-----END RSA PRIVATE KEY-----\n"; 
관련 문제