Estoy intentando conectarme a un servidor web SSL. Actualmente tenemos un archivo pkcs12 y conectamos, que es nuestra clave privada y certificado. ¿Es posible conectarse utilizando un código Java con una clave pública y un certificado? Imagina que tengo un archivo (es digital pero aquí está la salida pem).
> Myfile.pk12 / Myfile.pem
>
> -----BEGIN CERTIFICATE----- ...
> -----END CERTIFICATE-----
>
> -----BEGIN ENCRYPTED PRIVATE KEY----- ...
> -----END ENCRYPTED PRIVATE KEY-----
Y podemos conectarnos al servidor con esto:
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);
Esto funciona, pero digamos que nos conectamos con el certificado y la clave pública. ¿Java no crearía internamente una clave privada basada en el almacén de claves que proporcionamos y que nos permitiría conectarnos? Por ejemplo,
> MyfileNEW.pk12 / MyfileNEW.pem
>
> -----BEGIN CERTIFICATE----- ...
> -----END CERTIFICATE-----
>
> -----BEGIN PUBLIC KEY----- ...
> -----END PUBLIC KEY-----
¿Si la clave pública está incrustada en el certificado? ¿Puedo usar Java para enviar una solicitud al servidor sin crear previamente una clave privada?