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

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

Introduction

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

Prototype

public KeyPair getKeyPair(PEMKeyPair keyPair) throws PEMException 

Source Link

Usage

From source file:com.amazonaws.services.iot.demo.danbo.rpi.SslUtil.java

License:Open Source License

public static SSLSocketFactory getSslSocketFactory(final String caCrtFile, final String crtFile,
        final String keyFile, final String password)
        throws InvalidPathException, IOException, KeyStoreException, NoSuchAlgorithmException,
        CertificateException, UnrecoverableKeyException, KeyManagementException, Exception {
    Security.addProvider(new BouncyCastleProvider());

    // load CA certificate
    PEMParser parser = new PEMParser(
            new InputStreamReader(new ByteArrayInputStream(Files.readAllBytes(Paths.get(caCrtFile)))));
    X509CertificateHolder caCert = (X509CertificateHolder) parser.readObject();
    parser.close();/*from  ww w  .  j  ava2  s .  c  o m*/

    // load client certificate
    parser = new PEMParser(
            new InputStreamReader(new ByteArrayInputStream(Files.readAllBytes(Paths.get(crtFile)))));

    X509CertificateHolder cert = (X509CertificateHolder) parser.readObject();

    parser.close();

    // load client private key
    parser = new PEMParser(
            new InputStreamReader(new ByteArrayInputStream(Files.readAllBytes(Paths.get(keyFile)))));
    Object obj = parser.readObject();
    KeyPair key = null;
    JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");

    if (obj instanceof PEMEncryptedKeyPair) {
        PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder().build(password.toCharArray());
        converter = new JcaPEMKeyConverter().setProvider("BC");
        key = converter.getKeyPair(((PEMEncryptedKeyPair) obj).decryptKeyPair(decProv));
    } else {
        key = converter.getKeyPair((PEMKeyPair) obj);
    }

    parser.close();
    JcaX509CertificateConverter certConverter = new JcaX509CertificateConverter();
    certConverter.setProvider("BC");

    // CA certificate is used to authenticate server
    KeyStore caKs = KeyStore.getInstance(KeyStore.getDefaultType());
    caKs.load(null, null);
    caKs.setCertificateEntry("ca-certificate", certConverter.getCertificate(caCert));

    TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

    tmf.init(caKs);

    // Client key and certificates are sent to server so it can authenticate
    // us
    KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
    ks.load(null, null);
    ks.setCertificateEntry("certificate", certConverter.getCertificate(cert));
    ks.setKeyEntry("private-key", key.getPrivate(), password.toCharArray(),
            new java.security.cert.Certificate[] { certConverter.getCertificate(cert) });
    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    kmf.init(ks, password.toCharArray());

    // Finally, create SSL socket factory
    SSLContext context = SSLContext.getInstance("TLSv1.2");
    context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
    return context.getSocketFactory();
}

From source file:com.gitblit.transport.ssh.FileKeyPairProvider.java

License:Apache License

protected KeyPair doLoadKey(String file) {
    try {/*  w w  w . j  ava  2  s  . c  o m*/
        PEMParser r = new PEMParser(new InputStreamReader(new FileInputStream(file)));
        try {
            Object o = r.readObject();

            JcaPEMKeyConverter pemConverter = new JcaPEMKeyConverter();
            pemConverter.setProvider("BC");
            if (passwordFinder != null && o instanceof PEMEncryptedKeyPair) {
                JcePEMDecryptorProviderBuilder decryptorBuilder = new JcePEMDecryptorProviderBuilder();
                PEMDecryptorProvider pemDecryptor = decryptorBuilder.build(passwordFinder.getPassword());
                o = pemConverter.getKeyPair(((PEMEncryptedKeyPair) o).decryptKeyPair(pemDecryptor));
            }

            if (o instanceof PEMKeyPair) {
                o = pemConverter.getKeyPair((PEMKeyPair) o);
                return (KeyPair) o;
            } else if (o instanceof KeyPair) {
                return (KeyPair) o;
            }
        } finally {
            r.close();
        }
    } catch (Exception e) {
        log.warn("Unable to read key " + file, e);
    }
    return null;
}

From source file:com.google.examples.JOSEToolBase.java

License:Apache License

public static PrivateKey decodePrivateKey(String privateKeyString, String password) throws KeyParseException {
    try {/*w ww  . jav  a2s  .c  o  m*/
        JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
        privateKeyString = reformIndents(privateKeyString);
        PEMParser pemParser = new PEMParser(new StringReader(privateKeyString));
        Object object = pemParser.readObject();
        if (object == null) {
            throw new KeyParseException("unable to read anything when decoding private key");
        }

        KeyPair kp = null;

        //LOGGER.info(String.format("decodePrivateKey, %s", object.getClass().getName()));
        if (object instanceof PKCS8EncryptedPrivateKeyInfo) {
            // produced by "openssl genpkey" or  the series of commands reqd to sign an ec key
            //LOGGER.info("decodePrivateKey, encrypted PrivateKeyInfo");
            PKCS8EncryptedPrivateKeyInfo pkcs8EncryptedPrivateKeyInfo = (PKCS8EncryptedPrivateKeyInfo) object;
            JceOpenSSLPKCS8DecryptorProviderBuilder decryptorProviderBuilder = new JceOpenSSLPKCS8DecryptorProviderBuilder();
            InputDecryptorProvider decryptorProvider = decryptorProviderBuilder.build(password.toCharArray());
            PrivateKeyInfo privateKeyInfo = pkcs8EncryptedPrivateKeyInfo
                    .decryptPrivateKeyInfo(decryptorProvider);
            return (PrivateKey) converter.getPrivateKey(privateKeyInfo);
        }

        if (object instanceof PrivateKeyInfo) {
            // produced by openssl genpkey without encryption
            return (PrivateKey) converter.getPrivateKey((PrivateKeyInfo) object);
        }

        if (object instanceof PEMEncryptedKeyPair) {
            // produced by "openssl genrsa" or "openssl ec -genkey"
            // LOGGER.info("decodePrivateKey, encrypted keypair");
            PEMEncryptedKeyPair encryptedKeyPair = (PEMEncryptedKeyPair) object;
            PEMDecryptorProvider decryptorProvider = new JcePEMDecryptorProviderBuilder()
                    .build(password.toCharArray());
            kp = converter.getKeyPair(encryptedKeyPair.decryptKeyPair(decryptorProvider));
        } else if (object instanceof PEMKeyPair) {
            //LOGGER.info("decodePrivateKey, un-encrypted keypair");
            PEMKeyPair unencryptedKeyPair = (PEMKeyPair) object;
            kp = converter.getKeyPair(unencryptedKeyPair);
        } else {
            //LOGGER.error("decodePrivateKey, unknown object type {}", object.getClass().getName());
            throw new KeyParseException("unknown object type when decoding private key");
        }

        return (PrivateKey) kp.getPrivate();
    } catch (KeyParseException exc0) {
        throw exc0;
    } catch (Exception exc1) {
        throw new KeyParseException("cannot instantiate private key", exc1);
    }
}

From source file:com.hurence.logisland.connect.opc.ua.OpcUaSourceTask.java

License:Apache License

private PrivateKey decodePemPrivateKey(String privateKey) {
    try {//from  w  w w .  j  a v  a  2  s . c  o m
        PEMParser pemParser = new PEMParser(new StringReader(privateKey));
        Object object = pemParser.readObject();
        JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
        if (object instanceof PEMEncryptedKeyPair) {
            throw new UnsupportedOperationException("Encrypted keys are not yet supported");
        }
        PEMKeyPair ukp = (PEMKeyPair) object;
        KeyPair keyPair = converter.getKeyPair(ukp);
        return keyPair.getPrivate();
    } catch (Exception e) {
        throw new IllegalArgumentException("Unable to decode private key", e);
    }
}

From source file:com.trustly.api.security.KeyChain.java

License:Open Source License

/**
 * Loads the merchant private key.//from w w w. ja v  a 2 s.c  om
 * @param privateKeyFilename path to and name of private key.
 * @param password Password for the private key. "" or null if key requires no password.
 * @throws KeyException if key failed to load. For example if the path is incorrect.
 */
void loadMerchantPrivateKey(final String privateKeyFilename, final String password) throws KeyException {
    try {
        final File privateKeyFile = new File(privateKeyFilename); // private key file in PEM format
        final PEMParser pemParser = new PEMParser(new FileReader(privateKeyFile));
        final Object object = pemParser.readObject();

        final PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder().build(password.toCharArray());
        final JcaPEMKeyConverter converter = new JcaPEMKeyConverter();

        final KeyPair kp;
        if (object instanceof PEMEncryptedKeyPair) { // Password required
            kp = converter.getKeyPair(((PEMEncryptedKeyPair) object).decryptKeyPair(decProv));
        } else {
            kp = converter.getKeyPair((PEMKeyPair) object);
        }

        merchantPrivateKey = kp.getPrivate();
    } catch (final IOException e) {
        throw new KeyException("Failed to load private key", e);
    }
}

From source file:com.vmware.admiral.common.util.CertificateUtil.java

License:Open Source License

/**
 * Utility method to decode a PEM encoded private key string to a PrivateKey instance
 *
 * @param key//from   ww  w  .  j  a  v  a  2 s.c  o m
 *            - a PEM encoded private key string
 * @return - decoded PrivateKey instance
 */
public static KeyPair createKeyPair(String key) {
    AssertUtil.assertNotNull(key, "key");
    String decryptedKey = EncryptionUtils.decrypt(key);
    try (PEMParser parser = new PEMParser(new StringReader(decryptedKey))) {

        JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
        PEMKeyPair keyPair = (PEMKeyPair) parser.readObject();
        if (keyPair == null) {
            throw new RuntimeException("A valid key pair was not found");
        }
        return converter.getKeyPair(keyPair);

    } catch (IOException e) {
        throw new RuntimeException("Failed to create key pair", e);
    }
}

From source file:de.carne.certmgr.store.provider.bouncycastle.BouncyCastleStoreProvider.java

License:Open Source License

private KeyPair keyFromPEMObject(Object pemObject, PasswordCallback password, String resource)
        throws IOException {
    PEMKeyPair keyPair = null;//from w w  w. ja va2s  .c o m

    if (pemObject instanceof PEMEncryptedKeyPair) {
        PEMEncryptedKeyPair encryptedKeyPair = (PEMEncryptedKeyPair) pemObject;
        JcePEMDecryptorProviderBuilder decryptorBuilder = new JcePEMDecryptorProviderBuilder();
        String passwordInput = (password != null ? password.queryPassword(resource) : null);
        Exception invalidPasswordException = null;

        while (keyPair == null) {
            if (passwordInput == null) {
                throw new PasswordRequiredException("Password required for PEM object: '" + resource + "'",
                        invalidPasswordException);
            }

            assert password != null;

            PEMDecryptorProvider decryptorProvider = decryptorBuilder.build(passwordInput.toCharArray());

            try {
                keyPair = encryptedKeyPair.decryptKeyPair(decryptorProvider);
            } catch (EncryptionException e) {
                invalidPasswordException = e;
                passwordInput = password.requeryPassword(resource, e);
            }
        }
    } else {
        keyPair = (PEMKeyPair) pemObject;
    }

    JcaPEMKeyConverter keyConverter = new JcaPEMKeyConverter();

    return keyConverter.getKeyPair(keyPair);
}

From source file:de.mendelson.util.security.PEMKeys2Keystore.java

/**
 * @param pemReader Reader that accesses the RSA key in PEM format
 * @param keypass Passphrase for the keys stored in the PEM file
 * @param certificateStream Stream that accesses the certificate for the
 * keys/*from w  w w  .  j a  v  a2s .  c o  m*/
 * @param alias Alias to use in the new keystore
 *
 */
public void importKey(Reader pemReader, char[] keypass, InputStream certificateStream, String alias)
        throws Exception {
    this.keypass = keypass;
    PEMParser pemParser = new PEMParser(pemReader);
    Object readObject = pemParser.readObject();

    PEMDecryptorProvider decryptorProvider = new JcePEMDecryptorProviderBuilder().build(keypass);
    JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");

    PrivateKey privateKey = null;
    if (readObject instanceof PEMEncryptedKeyPair) {
        //Encrypted key - use provided password
        KeyPair keyPair = converter
                .getKeyPair(((PEMEncryptedKeyPair) readObject).decryptKeyPair(decryptorProvider));
        privateKey = keyPair.getPrivate();
    } else if (readObject instanceof PrivateKeyInfo) {
        //PKCS#8 format, the object will be an instanceof PrivateKeyInfo
        privateKey = converter.getPrivateKey((PrivateKeyInfo) readObject);
    } else {
        //Unencrypted key - no password needed
        KeyPair keyPair = converter.getKeyPair((PEMKeyPair) readObject);
        privateKey = keyPair.getPrivate();
    }
    X509Certificate cert = this.readCertificate(certificateStream);
    KeyStore store = this.keystore;
    if (store == null) {
        store = this.generateKeyStore();
    }
    //PKCS12 keys dont have a password, anyway take the given keystore pass as key pass for JKS
    store.setKeyEntry(alias, privateKey, keypass, new X509Certificate[] { cert });
}

From source file:de.mendelson.util.security.PEMKeys2PKCS12.java

/**
 * @param pemReader Reader that accesses the RSA key in PEM format
 * @param keypass Passphrase for the keys stored in the PEM file
 * @param certificateStream Stream that accesses the certificate for the
 * keys/*ww  w . j a v a  2 s .c om*/
 * @param alias Alias to use in the new keystore
 *
 */
public void importKey(Reader pemReader, char[] keypass, InputStream certificateStream, String alias)
        throws Exception {
    this.keypass = keypass;
    PEMParser pemParser = new PEMParser(pemReader);
    Object readObject = pemParser.readObject();
    PEMDecryptorProvider decryptorProvider = new JcePEMDecryptorProviderBuilder().build(keypass);
    JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
    PrivateKey privateKey = null;
    if (readObject instanceof PEMEncryptedKeyPair) {
        //Encrypted key - use provided password
        KeyPair keyPair = converter
                .getKeyPair(((PEMEncryptedKeyPair) readObject).decryptKeyPair(decryptorProvider));
        privateKey = keyPair.getPrivate();
    } else if (readObject instanceof PrivateKeyInfo) {
        //PKCS#8 format, the object will be an instanceof PrivateKeyInfo
        privateKey = converter.getPrivateKey((PrivateKeyInfo) readObject);
    } else {
        //Unencrypted key - no password needed
        KeyPair keyPair = converter.getKeyPair((PEMKeyPair) readObject);
        privateKey = keyPair.getPrivate();
    }
    X509Certificate cert = this.readCertificate(certificateStream);
    KeyStore store = this.keystore;
    if (store == null) {
        store = this.generateKeyStore();
    }
    //PKCS12 keys dont have a password
    store.setKeyEntry(alias, privateKey, "dummy".toCharArray(), new X509Certificate[] { cert });
}

From source file:io.smartspaces.util.net.SslUtils.java

License:Apache License

/**
 * Get an SSL socket factory that provides a client certificate for the socket
 * connections.//from   www . ja  va 2s. c om
 * 
 * @param caCrtFile
 *          file path to the certificate authority certificate
 * @param clientCrtFile
 *          file path to the certificate for the client
 * @param clientKeyFile
 *          file path to the private key for the client
 * 
 * @return the socket factory providing the client functionality
 * 
 * @throws Exception
 */
public static SSLSocketFactory configureSSLSocketFactory(String caCrtFile, String clientCrtFile,
        String clientKeyFile) throws Exception {
    Security.addProvider(new BouncyCastleProvider());

    JcaX509CertificateConverter certificateConverter = new JcaX509CertificateConverter()
            .setProvider(SECURITY_PROVIDER_BOUNCY_CASTLE);

    // load CA certificate
    PEMParser reader = new PEMParser(
            new InputStreamReader(new ByteArrayInputStream(Files.readAllBytes(Paths.get(caCrtFile)))));
    X509Certificate caCert = certificateConverter.getCertificate((X509CertificateHolder) reader.readObject());
    reader.close();

    // load client certificate
    reader = new PEMParser(
            new InputStreamReader(new ByteArrayInputStream(Files.readAllBytes(Paths.get(clientCrtFile)))));
    X509Certificate cert = certificateConverter.getCertificate((X509CertificateHolder) reader.readObject());
    reader.close();

    // load client private key
    JcaPEMKeyConverter keyConverter = new JcaPEMKeyConverter().setProvider(SECURITY_PROVIDER_BOUNCY_CASTLE);
    reader = new PEMParser(
            new InputStreamReader(new ByteArrayInputStream(Files.readAllBytes(Paths.get(clientKeyFile)))));
    KeyPair key = keyConverter.getKeyPair((PEMKeyPair) reader.readObject());
    reader.close();

    // CA certificate is used to authenticate server
    KeyStore caKs = KeyStore.getInstance(KeyStore.getDefaultType());
    caKs.load(null, null);
    caKs.setCertificateEntry("ca-certificate", caCert);
    TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    tmf.init(caKs);

    // client key and certificates are sent to server so it can authenticate
    // the client.F
    KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
    ks.load(null, null);
    ks.setCertificateEntry("certificate", cert);

    // This assumes that the client key is not password protected. We need a
    // password, but it could be anything.
    char[] password = VIRTUAL_KEYSTORE_PASSWORD.toCharArray();
    ks.setKeyEntry("private-key", key.getPrivate(), password, new java.security.cert.Certificate[] { cert });
    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    kmf.init(ks, password);

    // finally, create SSL socket factory.
    SSLContext context = SSLContext.getInstance("TLS");
    context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

    return context.getSocketFactory();
}