Conexión de fábrica SSL de Java al servidor SSL (solo con clave pública y certificado)

0

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?

    
pregunta Berlin Brown 10.12.2013 - 16:25
fuente

1 respuesta

1

Un certificado es una clave pública y la clave privada correspondiente.

Lo que se refiere como el certificado entre las etiquetas BEGIN CERTIFICATE y END CERTIFICATE es probablemente una clave pública.

La base de la criptografía de clave pública-privada es que no es computacionalmente posible generar una clave privada a partir de una clave pública determinada. La clave pública y la clave privada (es decir, el certificado) se generan juntas. La clave privada se utiliza para cifrar mensajes que solo se pueden descifrar con la clave pública. La clave pública se utiliza para cifrar mensajes que solo se pueden descifrar con la clave privada.

Sin la clave privada, la clave pública no se puede utilizar para el cifrado SSL, ya que el mensaje no se pudo descifrar en el extremo receptor (o no se pudo cifrar en el extremo emisor).

Un archivo PKCS # 12 generalmente contiene tanto la clave privada como la clave pública, y generalmente se cifra y almacena en un formato binario. Los formatos que está describiendo con las etiquetas BEGIN y END suelen ser un formato PEM, una representación de Base-64 de las claves con formato DER.

    
respondido por el CoverosGene 10.12.2013 - 17:42
fuente

Lea otras preguntas en las etiquetas