2014-07-23 18 views
9

Jak mogę zaimportować certyfikat .p12 ze ścieżki klasy do magazynu kluczy Java? Najpierw użyłem InstallCert https://code.google.com/p/java-use-examples/source/browse/trunk/src/com/aw/ad/util/InstallCert.java i dokonałem pewnych zmian, aby certyfikat serwera został zaimportowany do magazynu kluczy w katalogu instalacyjnym java. To działa dobrze, ale teraz chcę załadować certyfikat z mojej ścieżki klas.programowo zaimportuj certyfikat .cer do magazynu kluczy

EDIT: Właśnie użycie certyfikatu cer, zobacz następną odpowiedź

+0

Po rozwiązaniu własnego pytania należy je podać jako odpowiedź. Pomogło mi to, ponieważ jest to problem, który będę musiał rozwiązać w najbliższej przyszłości. Więc może pomóc innym. –

+0

Okay, miło mi pomóc innym :) – Pali

Odpowiedz

18

odpowiedź:

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(); 

Dla Java Web Start nie używaj classloader, użyć klasy itselfe:

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

+1 To wszystko świetnie! :) –

+0

Bardzo dziękuję :) – Pali

+1

Jakąkolwiek wskazówkę, jak rozwiązać problem odmowy dostępu? (chociaż jestem administratorem) java.io.FileNotFoundException: C: \ Program Files (x86) \ Java \ jre1.8.0_45 \ lib \ security \ cacerts (Odmowa dostępu) – lumo

Powiązane problemy