Example usage for org.bouncycastle.openssl.jcajce JcaPEMKeyConverter JcaPEMKeyConverter

List of usage examples for org.bouncycastle.openssl.jcajce JcaPEMKeyConverter JcaPEMKeyConverter

Introduction

In this page you can find the example usage for org.bouncycastle.openssl.jcajce JcaPEMKeyConverter JcaPEMKeyConverter.

Prototype

JcaPEMKeyConverter

Source Link

Usage

From source file:org.kse.crypto.publickey.OpenSslPubUtil.java

License:Open Source License

/**
 * Load an unencrypted OpenSSL public key from the stream. The encoding of
 * the public key may be PEM or DER./*from www . ja  v a  2 s  .  co m*/
 *
 * @param pkData BA to load the unencrypted public key from
 * @return The public key
 * @throws CryptoException
 *             Problem encountered while loading the public key
 * @throws IOException
 *             An I/O error occurred
 */
public static PublicKey load(byte[] pkData) throws CryptoException, IOException {

    // Check if stream is PEM encoded
    PemInfo pemInfo = PemUtil.decode(pkData);

    if (pemInfo != null) {
        // It is - get DER from PEM
        pkData = pemInfo.getContent();
    }

    try {
        // DER-encoded subjectPublicKeyInfo structure - the OpenSSL format
        SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfo.getInstance(pkData);
        return new JcaPEMKeyConverter().getPublicKey(publicKeyInfo);
    } catch (Exception ex) {
        throw new CryptoException(res.getString("NoLoadOpenSslPublicKey.exception.message"), ex);
    }
}

From source file:org.loklak.LoklakInstallation.java

License:Open Source License

private static void setupHttpServer(int httpPort, int httpsPort) throws Exception {
    QueuedThreadPool pool = new QueuedThreadPool();
    pool.setMaxThreads(500);/*www .  j  a va 2  s.  c  om*/
    LoklakInstallation.server = new Server(pool);
    LoklakInstallation.server.setStopAtShutdown(true);

    //http
    if (!httpsMode.equals(HttpsMode.ONLY)) {
        HttpConfiguration http_config = new HttpConfiguration();
        if (httpsMode.equals(HttpsMode.REDIRECT)) { //redirect
            http_config.addCustomizer(new SecureRequestCustomizer());
            http_config.setSecureScheme("https");
            http_config.setSecurePort(httpsPort);
        }

        ServerConnector connector = new ServerConnector(LoklakInstallation.server);
        connector.addConnectionFactory(new HttpConnectionFactory(http_config));
        connector.setPort(httpPort);
        connector.setName("httpd:" + httpPort);
        connector.setIdleTimeout(20000); // timout in ms when no bytes send / received
        LoklakInstallation.server.addConnector(connector);
    }

    //https
    //uncommented lines for http2 (jetty 9.3 / java 8)        
    if (httpsMode.isGreaterOrEqualTo(HttpsMode.ON)) {

        Log.getLog().info("HTTPS activated");

        String keySource = DAO.getConfig("https.keysource", "keystore");
        KeyStore keyStore;
        String keystoreManagerPass;

        //check for key source. Can be a java keystore or in pem format (gets converted automatically)
        if ("keystore".equals(keySource)) {
            Log.getLog().info("Loading keystore from disk");

            //use native keystore format

            File keystoreFile = new File(DAO.conf_dir, DAO.getConfig("keystore.name", "keystore.jks"));
            if (!keystoreFile.exists() || !keystoreFile.isFile() || !keystoreFile.canRead()) {
                throw new Exception("Could not find keystore");
            }
            keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            keyStore.load(new FileInputStream(keystoreFile.getAbsolutePath()),
                    DAO.getConfig("keystore.password", "").toCharArray());

            keystoreManagerPass = DAO.getConfig("keystore.password", "");
        } else if ("key-cert".equals(keySource)) {
            Log.getLog().info("Importing keystore from key/cert files");
            //use more common pem format as used by openssl

            //generate random password
            char[] chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
            StringBuilder sb = new StringBuilder();
            Random random = new Random();
            for (int i = 0; i < 20; i++) {
                char c = chars[random.nextInt(chars.length)];
                sb.append(c);
            }
            String password = keystoreManagerPass = sb.toString();

            //get key and cert
            File keyFile = new File(DAO.getConfig("https.key", ""));
            if (!keyFile.exists() || !keyFile.isFile() || !keyFile.canRead()) {
                throw new Exception("Could not find key file");
            }
            File certFile = new File(DAO.getConfig("https.cert", ""));
            if (!certFile.exists() || !certFile.isFile() || !certFile.canRead()) {
                throw new Exception("Could not find cert file");
            }

            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

            byte[] keyBytes = Files.readAllBytes(keyFile.toPath());
            byte[] certBytes = Files.readAllBytes(certFile.toPath());

            PEMParser parser = new PEMParser(new InputStreamReader(new ByteArrayInputStream(certBytes)));
            X509Certificate cert = new JcaX509CertificateConverter().setProvider("BC")
                    .getCertificate((X509CertificateHolder) parser.readObject());

            parser = new PEMParser(new InputStreamReader(new ByteArrayInputStream(keyBytes)));
            PrivateKey key = new JcaPEMKeyConverter().setProvider("BC")
                    .getPrivateKey((PrivateKeyInfo) parser.readObject());

            keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            keyStore.load(null, null);

            keyStore.setCertificateEntry(cert.getSubjectX500Principal().getName(), cert);
            keyStore.setKeyEntry("defaultKey", key, password.toCharArray(), new Certificate[] { cert });

            Log.getLog().info("Successfully imported keystore from key/cert files");
        } else {
            throw new Exception("Invalid option for https.keysource");
        }

        HttpConfiguration https_config = new HttpConfiguration();
        https_config.addCustomizer(new SecureRequestCustomizer());

        HttpConnectionFactory http1 = new HttpConnectionFactory(https_config);
        //HTTP2ServerConnectionFactory http2 = new HTTP2ServerConnectionFactory(https_config);

        //NegotiatingServerConnectionFactory.checkProtocolNegotiationAvailable();
        //ALPNServerConnectionFactory alpn = new ALPNServerConnectionFactory();
        //alpn.setDefaultProtocol(http1.getProtocol());

        SslContextFactory sslContextFactory = new SslContextFactory();

        sslContextFactory.setKeyStore(keyStore);
        sslContextFactory.setKeyManagerPassword(keystoreManagerPass);
        //sslContextFactory.setCipherComparator(HTTP2Cipher.COMPARATOR);
        //sslContextFactory.setUseCipherSuitesOrder(true);

        //SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, alpn.getProtocol());
        SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, "http/1.1");

        //ServerConnector sslConnector = new ServerConnector(LoklakServer.server, ssl, alpn, http2, http1);
        ServerConnector sslConnector = new ServerConnector(LoklakInstallation.server, ssl, http1);
        sslConnector.setPort(httpsPort);
        sslConnector.setName("httpd:" + httpsPort);
        sslConnector.setIdleTimeout(20000); // timout in ms when no bytes send / received
        LoklakInstallation.server.addConnector(sslConnector);
    }
}

From source file:org.loklak.LoklakServer.java

License:Open Source License

private static void setupHttpServer(int httpPort, int httpsPort) throws Exception {
    QueuedThreadPool pool = new QueuedThreadPool();
    pool.setMaxThreads(500);/*w  ww  . j ava 2  s . c om*/
    LoklakServer.server = new Server(pool);
    LoklakServer.server.setStopAtShutdown(true);

    //http
    if (!httpsMode.equals(HttpsMode.ONLY)) {
        HttpConfiguration http_config = new HttpConfiguration();
        if (httpsMode.equals(HttpsMode.REDIRECT)) { //redirect
            http_config.addCustomizer(new SecureRequestCustomizer());
            http_config.setSecureScheme("https");
            http_config.setSecurePort(httpsPort);
        }

        ServerConnector connector = new ServerConnector(LoklakServer.server);
        connector.addConnectionFactory(new HttpConnectionFactory(http_config));
        connector.setPort(httpPort);
        connector.setName("httpd:" + httpPort);
        connector.setIdleTimeout(20000); // timout in ms when no bytes send / received
        LoklakServer.server.addConnector(connector);
    }

    //https
    //uncommented lines for http2 (jetty 9.3 / java 8)        
    if (httpsMode.isGreaterOrEqualTo(HttpsMode.ON)) {

        Log.getLog().info("HTTPS activated");

        String keySource = DAO.getConfig("https.keysource", "keystore");
        KeyStore keyStore;
        String keystoreManagerPass;

        //check for key source. Can be a java keystore or in pem format (gets converted automatically)
        if ("keystore".equals(keySource)) {
            Log.getLog().info("Loading keystore from disk");

            //use native keystore format

            File keystoreFile = new File(DAO.conf_dir, DAO.getConfig("keystore.name", "keystore.jks"));
            if (!keystoreFile.exists() || !keystoreFile.isFile() || !keystoreFile.canRead()) {
                throw new Exception("Could not find keystore");
            }
            keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            keyStore.load(new FileInputStream(keystoreFile.getAbsolutePath()),
                    DAO.getConfig("keystore.password", "").toCharArray());

            keystoreManagerPass = DAO.getConfig("keystore.password", "");
        } else if ("key-cert".equals(keySource)) {
            Log.getLog().info("Importing keystore from key/cert files");
            //use more common pem format as used by openssl

            //generate random password
            char[] chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
            StringBuilder sb = new StringBuilder();
            Random random = new Random();
            for (int i = 0; i < 20; i++) {
                char c = chars[random.nextInt(chars.length)];
                sb.append(c);
            }
            String password = keystoreManagerPass = sb.toString();

            //get key and cert
            File keyFile = new File(DAO.getConfig("https.key", ""));
            if (!keyFile.exists() || !keyFile.isFile() || !keyFile.canRead()) {
                throw new Exception("Could not find key file");
            }
            File certFile = new File(DAO.getConfig("https.cert", ""));
            if (!certFile.exists() || !certFile.isFile() || !certFile.canRead()) {
                throw new Exception("Could not find cert file");
            }

            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

            byte[] keyBytes = Files.readAllBytes(keyFile.toPath());
            byte[] certBytes = Files.readAllBytes(certFile.toPath());

            PEMParser parser = new PEMParser(new InputStreamReader(new ByteArrayInputStream(certBytes)));
            X509Certificate cert = new JcaX509CertificateConverter().setProvider("BC")
                    .getCertificate((X509CertificateHolder) parser.readObject());

            parser = new PEMParser(new InputStreamReader(new ByteArrayInputStream(keyBytes)));
            PrivateKey key = new JcaPEMKeyConverter().setProvider("BC")
                    .getPrivateKey((PrivateKeyInfo) parser.readObject());

            keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            keyStore.load(null, null);

            keyStore.setCertificateEntry(cert.getSubjectX500Principal().getName(), cert);
            keyStore.setKeyEntry("defaultKey", key, password.toCharArray(), new Certificate[] { cert });

            Log.getLog().info("Successfully imported keystore from key/cert files");
        } else {
            throw new Exception("Invalid option for https.keysource");
        }

        HttpConfiguration https_config = new HttpConfiguration();
        https_config.addCustomizer(new SecureRequestCustomizer());

        HttpConnectionFactory http1 = new HttpConnectionFactory(https_config);
        //HTTP2ServerConnectionFactory http2 = new HTTP2ServerConnectionFactory(https_config);

        //NegotiatingServerConnectionFactory.checkProtocolNegotiationAvailable();
        //ALPNServerConnectionFactory alpn = new ALPNServerConnectionFactory();
        //alpn.setDefaultProtocol(http1.getProtocol());

        SslContextFactory sslContextFactory = new SslContextFactory();

        sslContextFactory.setKeyStore(keyStore);
        sslContextFactory.setKeyManagerPassword(keystoreManagerPass);
        //sslContextFactory.setCipherComparator(HTTP2Cipher.COMPARATOR);
        //sslContextFactory.setUseCipherSuitesOrder(true);

        //SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, alpn.getProtocol());
        SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, "http/1.1");

        //ServerConnector sslConnector = new ServerConnector(LoklakServer.server, ssl, alpn, http2, http1);
        ServerConnector sslConnector = new ServerConnector(LoklakServer.server, ssl, http1);
        sslConnector.setPort(httpsPort);
        sslConnector.setName("httpd:" + httpsPort);
        sslConnector.setIdleTimeout(20000); // timout in ms when no bytes send / received
        LoklakServer.server.addConnector(sslConnector);
    }
}

From source file:org.loklak.SusiInstallation.java

License:Open Source License

private static void setupHttpServer(int httpPort, int httpsPort) throws Exception {
    QueuedThreadPool pool = new QueuedThreadPool();
    pool.setMaxThreads(500);/* w  w w.j  ava 2 s .  co m*/
    SusiInstallation.server = new Server(pool);
    SusiInstallation.server.setStopAtShutdown(true);

    //http
    if (!httpsMode.equals(HttpsMode.ONLY)) {
        HttpConfiguration http_config = new HttpConfiguration();
        if (httpsMode.equals(HttpsMode.REDIRECT)) { //redirect
            http_config.addCustomizer(new SecureRequestCustomizer());
            http_config.setSecureScheme("https");
            http_config.setSecurePort(httpsPort);
        }

        ServerConnector connector = new ServerConnector(SusiInstallation.server);
        connector.addConnectionFactory(new HttpConnectionFactory(http_config));
        connector.setPort(httpPort);
        connector.setName("httpd:" + httpPort);
        connector.setIdleTimeout(20000); // timout in ms when no bytes send / received
        SusiInstallation.server.addConnector(connector);
    }

    //https
    //uncommented lines for http2 (jetty 9.3 / java 8)        
    if (httpsMode.isGreaterOrEqualTo(HttpsMode.ON)) {

        Log.getLog().info("HTTPS activated");

        String keySource = DAO.getConfig("https.keysource", "keystore");
        KeyStore keyStore;
        String keystoreManagerPass;

        //check for key source. Can be a java keystore or in pem format (gets converted automatically)
        if ("keystore".equals(keySource)) {
            Log.getLog().info("Loading keystore from disk");

            //use native keystore format

            File keystoreFile = new File(DAO.conf_dir, DAO.getConfig("keystore.name", "keystore.jks"));
            if (!keystoreFile.exists() || !keystoreFile.isFile() || !keystoreFile.canRead()) {
                throw new Exception("Could not find keystore");
            }
            keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            keyStore.load(new FileInputStream(keystoreFile.getAbsolutePath()),
                    DAO.getConfig("keystore.password", "").toCharArray());

            keystoreManagerPass = DAO.getConfig("keystore.password", "");
        } else if ("key-cert".equals(keySource)) {
            Log.getLog().info("Importing keystore from key/cert files");
            //use more common pem format as used by openssl

            //generate random password
            char[] chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
            StringBuilder sb = new StringBuilder();
            Random random = new Random();
            for (int i = 0; i < 20; i++) {
                char c = chars[random.nextInt(chars.length)];
                sb.append(c);
            }
            String password = keystoreManagerPass = sb.toString();

            //get key and cert
            File keyFile = new File(DAO.getConfig("https.key", ""));
            if (!keyFile.exists() || !keyFile.isFile() || !keyFile.canRead()) {
                throw new Exception("Could not find key file");
            }
            File certFile = new File(DAO.getConfig("https.cert", ""));
            if (!certFile.exists() || !certFile.isFile() || !certFile.canRead()) {
                throw new Exception("Could not find cert file");
            }

            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

            byte[] keyBytes = Files.readAllBytes(keyFile.toPath());
            byte[] certBytes = Files.readAllBytes(certFile.toPath());

            PEMParser parser = new PEMParser(new InputStreamReader(new ByteArrayInputStream(certBytes)));
            X509Certificate cert = new JcaX509CertificateConverter().setProvider("BC")
                    .getCertificate((X509CertificateHolder) parser.readObject());

            parser = new PEMParser(new InputStreamReader(new ByteArrayInputStream(keyBytes)));
            PrivateKey key = new JcaPEMKeyConverter().setProvider("BC")
                    .getPrivateKey((PrivateKeyInfo) parser.readObject());

            keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            keyStore.load(null, null);

            keyStore.setCertificateEntry(cert.getSubjectX500Principal().getName(), cert);
            keyStore.setKeyEntry("defaultKey", key, password.toCharArray(), new Certificate[] { cert });

            Log.getLog().info("Successfully imported keystore from key/cert files");
        } else {
            throw new Exception("Invalid option for https.keysource");
        }

        HttpConfiguration https_config = new HttpConfiguration();
        https_config.addCustomizer(new SecureRequestCustomizer());

        HttpConnectionFactory http1 = new HttpConnectionFactory(https_config);
        //HTTP2ServerConnectionFactory http2 = new HTTP2ServerConnectionFactory(https_config);

        //NegotiatingServerConnectionFactory.checkProtocolNegotiationAvailable();
        //ALPNServerConnectionFactory alpn = new ALPNServerConnectionFactory();
        //alpn.setDefaultProtocol(http1.getProtocol());

        SslContextFactory sslContextFactory = new SslContextFactory();

        sslContextFactory.setKeyStore(keyStore);
        sslContextFactory.setKeyManagerPassword(keystoreManagerPass);
        //sslContextFactory.setCipherComparator(HTTP2Cipher.COMPARATOR);
        //sslContextFactory.setUseCipherSuitesOrder(true);

        //SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, alpn.getProtocol());
        SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, "http/1.1");

        ServerConnector sslConnector = new ServerConnector(SusiInstallation.server, ssl, http1);
        sslConnector.setPort(httpsPort);
        sslConnector.setName("httpd:" + httpsPort);
        sslConnector.setIdleTimeout(20000); // timout in ms when no bytes send / received
        SusiInstallation.server.addConnector(sslConnector);
    }
}

From source file:org.metaeffekt.dcc.commons.pki.KeyUtils.java

License:Apache License

public static PrivateKey loadKey(String file) throws IOException {
    PEMParser parser = new PEMParser(new FileReader(file));
    try {// w  w w.  jav  a 2s  .c  o  m
        PEMKeyPair pemObject = (PEMKeyPair) parser.readObject();
        PrivateKeyInfo info = pemObject.getPrivateKeyInfo();
        JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
        return converter.getPrivateKey(info);
    } finally {
        IOUtils.closeQuietly(parser);
    }
}

From source file:org.metaeffekt.dcc.commons.pki.KeyUtils.java

License:Apache License

public static PublicKey loadPublicKey(String file) throws IOException {
    PEMParser parser = new PEMParser(new FileReader(file));
    try {/*  w ww . j  ava  2s. c  om*/
        SubjectPublicKeyInfo pemObject = (SubjectPublicKeyInfo) parser.readObject();
        JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
        return converter.getPublicKey(pemObject);
    } finally {
        IOUtils.closeQuietly(parser);
    }
}

From source file:org.metaeffekt.dcc.commons.pki.KeyUtils.java

License:Apache License

public static PublicKey loadPublicKeyFromKeyPair(String file) throws IOException {
    PEMParser parser = new PEMParser(new FileReader(file));
    try {/*from w ww.  j  av a2  s . c  o  m*/
        PEMKeyPair pemObject = (PEMKeyPair) parser.readObject();
        SubjectPublicKeyInfo info = pemObject.getPublicKeyInfo();
        JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
        return converter.getPublicKey(info);
    } finally {
        IOUtils.closeQuietly(parser);
    }
}

From source file:org.onosproject.netconf.ctl.impl.NetconfSessionMinaImpl.java

License:Apache License

@Deprecated
private void startSession() throws IOException {
    final ConnectFuture connectFuture;
    connectFuture = client.connect(deviceInfo.name(), deviceInfo.ip().toString(), deviceInfo.port())
            .verify(connectTimeout, TimeUnit.SECONDS);
    session = connectFuture.getSession();
    //Using the device ssh key if possible
    if (deviceInfo.getKey() != null) {
        try (PEMParser pemParser = new PEMParser(new CharArrayReader(deviceInfo.getKey()))) {
            JcaPEMKeyConverter converter = new JcaPEMKeyConverter()
                    .setProvider(BouncyCastleProvider.PROVIDER_NAME);
            try {
                KeyPair kp = converter.getKeyPair((PEMKeyPair) pemParser.readObject());
                session.addPublicKeyIdentity(kp);
            } catch (IOException e) {
                throw new NetconfException("Failed to authenticate session with device " + deviceInfo
                        + "check key to be a valid key", e);
            }//from w w  w.  ja v  a 2  s  .  com
        }
    } else {
        session.addPasswordIdentity(deviceInfo.password());
    }
    session.auth().verify(connectTimeout, TimeUnit.SECONDS);
    Set<ClientSession.ClientSessionEvent> event = session
            .waitFor(
                    ImmutableSet.of(ClientSession.ClientSessionEvent.WAIT_AUTH,
                            ClientSession.ClientSessionEvent.CLOSED, ClientSession.ClientSessionEvent.AUTHED),
                    0);

    if (!event.contains(ClientSession.ClientSessionEvent.AUTHED)) {
        log.debug("Session closed {} {}", event, session.isClosed());
        throw new NetconfException(
                "Failed to authenticate session with device " + deviceInfo + "check the user/pwd or key");
    }
    openChannel();
}

From source file:org.pepstock.jem.node.security.Crypto.java

License:Open Source License

/**
 * Loads a private key from a file, using password and file passed ar argument
 * //from  www.j  a  va  2s  . c  o m
 * @param pemKeyFile is the pem file of the RSA private key of the user.
 * @param password the password of the private key if the private key is
 *            protected by a password, null otherwise
 * @return the private Key read from pem file
 * @throws KeyException if any Exception occurs while extracting private key
 * @throws MessageException if any Exception occurs while extracting private key
 */
public static Key loadPrivateKeyFromFile(File pemKeyFile, String password)
        throws MessageException, KeyException {
    try {
        // checks if the provider is loaded.
        // if not, it adds BouncyCastle as provider
        if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
            Security.addProvider(new BouncyCastleProvider());
        }
        // private key file in PEM format, from file
        PEMParser pemParser = new PEMParser(
                new InputStreamReader(new FileInputStream(pemKeyFile), CharSet.DEFAULT));
        // reads the object and close the parser and input stream
        Object object = pemParser.readObject();
        pemParser.close();
        // creates a key converter by BouncyCastle
        JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider(BouncyCastleProvider.PROVIDER_NAME);
        // gets key pair instance
        KeyPair kp;
        // if is a PEM
        if (object instanceof PEMEncryptedKeyPair) {
            if (password == null) {
                throw new MessageException(NodeMessage.JEMC205E);
            }
            // uses the PEM decryptor using password
            PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder().build(password.toCharArray());
            kp = converter.getKeyPair(((PEMEncryptedKeyPair) object).decryptKeyPair(decProv));
        } else {
            // if here, the key it's protected by password
            LogAppl.getInstance().emit(NodeMessage.JEMC199W);
            kp = converter.getKeyPair((PEMKeyPair) object);
        }
        return kp.getPrivate();
    } catch (FileNotFoundException e) {
        throw new KeyException(e.getMessage(), e);
    } catch (PEMException e) {
        throw new KeyException(e.getMessage(), e);
    } catch (IOException e) {
        throw new KeyException(e.getMessage(), e);
    }
}

From source file:org.renci.ahab.ndllib.transport.OrcaSMXMLRPCProxy.java

private KeyStore loadX509Data(FileInputStream certIS, FileInputStream keyIS, String keyAlias,
        String keyPassword) throws Exception {

    if (Security.getProvider("BC") == null) {
        Security.addProvider(new BouncyCastleProvider());
    }//  w  ww . j a  v  a  2s  .c om

    /*
    AccessController.doPrivileged(new PrivilegedAction<Void>() {
            public Void run() {
                    if (Security.getProvider("BC") == null) {
                            Security.addProvider(new BouncyCastleProvider());
                    }
                    System.out.println("Currently loaded security providers:");
                    for (Provider p: Security.getProviders()) {
                            System.out.println("Provider " + p + " - " +  p.getName());
                    }
                    System.out.println("End of security provider list.");
                    return null;
            }
    });
    */

    JcaPEMKeyConverter keyConverter = new JcaPEMKeyConverter().setProvider("BC");
    JcaX509CertificateConverter certConverter = new JcaX509CertificateConverter().setProvider("BC");

    Object object;

    PEMParser pemParser = new PEMParser(new BufferedReader(new InputStreamReader(keyIS, "UTF-8")));

    PrivateKey privKey = null;

    while ((object = pemParser.readObject()) != null) {
        if (object instanceof PKCS8EncryptedPrivateKeyInfo) {
            InputDecryptorProvider decProv = new JceOpenSSLPKCS8DecryptorProviderBuilder()
                    .build(keyPassword.toCharArray());
            privKey = keyConverter
                    .getPrivateKey(((PKCS8EncryptedPrivateKeyInfo) object).decryptPrivateKeyInfo(decProv));
            break;
        } else if (object instanceof PEMEncryptedKeyPair) {
            PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder()
                    .build(keyPassword.toCharArray());
            privKey = keyConverter.getPrivateKey(
                    (((PEMEncryptedKeyPair) object).decryptKeyPair(decProv)).getPrivateKeyInfo());
            break;
        } else if (object instanceof PEMKeyPair) {
            privKey = keyConverter.getPrivateKey(((PEMKeyPair) object).getPrivateKeyInfo());
            break;
        }
    }

    if (privKey == null)
        throw new Exception("Private key file did not contain a private key.");

    pemParser = new PEMParser(new BufferedReader(new InputStreamReader(certIS, "UTF-8")));

    ArrayList<Certificate> certs = new ArrayList<Certificate>();

    while ((object = pemParser.readObject()) != null) {
        if (object instanceof X509CertificateHolder) {
            certs.add(certConverter.getCertificate((X509CertificateHolder) object));
        }
    }

    if (certs.isEmpty())
        throw new Exception("Certificate file contained no certificates.");

    KeyStore ks = KeyStore.getInstance("jks");
    ks.load(null);
    ks.setKeyEntry(keyAlias, privKey, keyPassword.toCharArray(), certs.toArray(new Certificate[certs.size()]));

    return ks;
}