I am trying to connect to a SSL web server. We currently have a pkcs12 file and connect, that is our private-key and certificate. Is it possible to connect using Java code with a public-key and certificate. Imagine I have a file (it is digital but here is the pem output).
> Myfile.pk12 / Myfile.pem
>
> -----BEGIN CERTIFICATE----- ...
> -----END CERTIFICATE-----
>
> -----BEGIN ENCRYPTED PRIVATE KEY----- ...
> -----END ENCRYPTED PRIVATE KEY-----
And we can connect to the server with this:
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.conn.ssl.X509HostnameVerifier;
import org.apache.http.impl.client.DefaultHttpClient;
KeyStore keyStore = generateKeyStore();
System.out.println("==>" + keyStore);
SSLSocketFactory socketFactory = new SSLSocketFactory(
SSLSocketFactory.TLS,
keyStore,
KEYSTORE_PASSCODE,
null,
null,
(X509HostnameVerifier) SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
This works, but let's say we connect with the certificate and public key. Wouldn't Java internally create a private key based on the keystore we provide and that would allow us to connect? E.g.
> MyfileNEW.pk12 / MyfileNEW.pem
>
> -----BEGIN CERTIFICATE----- ...
> -----END CERTIFICATE-----
>
> -----BEGIN PUBLIC KEY----- ...
> -----END PUBLIC KEY-----
If the public key is embedded in the certificate? Can I use Java to send a request to the server without pre-creating a private key?