2014-07-23 8 views
9

클래스 경로에서 .p12 인증서를 Java 키 저장소로 가져올 수 있습니까? 먼저 InstallCert https://code.google.com/p/java-use-examples/source/browse/trunk/src/com/aw/ad/util/InstallCert.java을 사용하고 일부 변경을 수행하여 서버 인증서를 Java 설치 디렉토리의 키 스토어로 가져옵니다. 이 잘 작동하지만 이제 클래스 경로에서 인증서를로드 할..cer 인증서를 키 저장소에 프로그래밍 방식으로 가져 오기

편집 : 난 그냥

+0

자신 만의 질문을 풀었을 때 대답으로 써야합니다. 가까운 장래에 해결해야 할 문제이기 때문에 도움이되었습니다. 그래서 다른 사람들을 도울 수 있습니다. –

+0

다른 사람들을 도우려고 기쁘다. – Pali

답변

18

대답 다음 대답을 참조하십시오 .CER 인증서를 사용 :

InputStream certIn = Certificates.class.getResourceAsStream("/package/myCert.cer"); 
:

자바 웹 스타트를 들어
InputStream certIn = ClassLoader.class.getResourceAsStream("/package/myCert.cer"); 

    final char sep = File.separatorChar; 
    File dir = new File(System.getProperty("java.home") + sep + "lib" + sep + "security"); 
    File file = new File(dir, "cacerts"); 
    InputStream localCertIn = new FileInputStream(file); 

    KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 
    keystore.load(localCertIn, passphrase); 
    if (keystore.containsAlias("myAlias")) { 
     certIn.close(); 
     localCertIn.close(); 
     return; 
    } 
    localCertIn.close(); 

    BufferedInputStream bis = new BufferedInputStream(certIn); 
    CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
    while (bis.available() > 0) { 
     Certificate cert = cf.generateCertificate(bis); 
     keystore.setCertificateEntry("myAlias", cert); 
    } 

    certIn.close(); 

    OutputStream out = new FileOutputStream(file); 
    keystore.store(out, passphrase); 
    out.close(); 

이 클래스 로더를 사용 해달라고을, 클래스 itselfe을 사용

+0

+1 정말 멋지다! :) –

+0

대단히 감사합니다 :) – Pali

+1

어떤 단서 어떻게 접근에 대한 문제를 해결하기 위해 거부? (관리자 임에도 불구하고) java.io.FileNotFoundException : C : \ Program Files (x86) \ Java \ jre1.8.0_45 \ lib \ security \ cacerts – lumo