Connessione Java SSL factory al server SSL (con solo chiave pubblica e certificato)

0

Sto tentando di connettermi a un server Web SSL. Al momento disponiamo di un file pkcs12 e ci colleghiamo, ovvero la nostra chiave privata e il certificato. È possibile connettersi utilizzando il codice Java con una chiave pubblica e un certificato. Immagina di avere un file (è digitale ma qui è l'uscita pem).

> Myfile.pk12 / Myfile.pem
> 
> -----BEGIN CERTIFICATE----- ...
> -----END CERTIFICATE-----
> 
> -----BEGIN ENCRYPTED PRIVATE KEY----- ...
> -----END ENCRYPTED PRIVATE KEY-----

E possiamo connetterci al server con questo:

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);

Funziona, ma diciamo che ci connettiamo con il certificato e la chiave pubblica. Java non creerebbe internamente una chiave privata basata sul keystore che forniamo e che ci permetterebbe di connetterci? Per es.

> MyfileNEW.pk12 / MyfileNEW.pem
> 
> -----BEGIN CERTIFICATE----- ...
> -----END CERTIFICATE-----
> 
> -----BEGIN PUBLIC KEY----- ...
> -----END PUBLIC KEY-----

Se la chiave pubblica è incorporata nel certificato? Posso usare Java per inviare una richiesta al server senza pre-creare una chiave privata?

    
posta Berlin Brown 10.12.2013 - 16:25
fonte

1 risposta

1

Un certificato è una chiave pubblica e la chiave privata corrispondente.

Ciò a cui ti riferisci come certificato tra i tag BEGIN CERTIFICATE e END CERTIFICATE è probabilmente una chiave pubblica.

La base della crittografia a chiave pubblico-privata è che non è computazionalmente possibile generare una chiave privata da una determinata chiave pubblica. La chiave pubblica e la chiave privata (ad es. Il certificato) sono generate insieme. La chiave privata viene utilizzata per crittografare i messaggi che possono essere decodificati solo con la chiave pubblica. La chiave pubblica viene utilizzata per crittografare i messaggi che possono essere decodificati solo con la chiave privata.

Senza la chiave privata, la chiave pubblica non può essere utilizzata per la crittografia SSL, in quanto il messaggio non può essere decodificato sul lato ricevente (o non può essere crittografato sul lato di invio).

Un file PKCS # 12 di solito contiene sia la chiave privata che la chiave pubblica e in genere viene crittografato e archiviato in formato binario. I formati che stai descrivendo con i tag BEGIN e END sono in genere un formato PEM, una rappresentazione Base-64 delle chiavi formattate DER.

    
risposta data 10.12.2013 - 17:42
fonte

Leggi altre domande sui tag