2012-10-30 11 views
31

Sto provando a stabilire una connessione SSL o TLS tra un client Java e un server che sto configurando.Differenza tra SSL e TLS e il loro utilizzo in Java

Ho utilizzato SSLContext.getInstance("SSL") per creare il SSLContext e ha funzionato.

Mi piacerebbe sapere qual è lo scopo del parametro in SSLContext.getInstance(String protocol).

In particolare, quali sono le modifiche tra l'utilizzo di SSLContext.getInstance("SSL") e SSLContext.getInstance("TLS") o altri valori possibili?

+0

vedere http://en.wikipedia.org/wiki/Transport_Layer_Security –

+3

Hai provato a leggere la [documentazione] (http://docs.oracle.com/javase/6/docs/api/javax/net/ ssl/SSLContext.html # getInstance% 28java.lang.String% 29)? – Kai

+0

Li cerco e conosco la differenza tra ssl, sslv3, tls, semplicemente non conosco la comunicazione tra server e client con un tipo di protocollo diverso. Grazie – user1781746

risposta

0

Il protocollo viene utilizzato per la comunicazione tra server e client. Quindi, SSLContext(String protocol) restituisce l'istanza del protocollo e quindi utilizzando quel server o client comunicano tra loro per il livello di sicurezza.

Per ulteriori riferimenti, fare riferimento a questo collegamento. http://www.herongyang.com/JDK/SSL-java-net-ssl-SSLContext-Class-Test.html

+0

Ho appena detto che nel server, creo un protocollo 'tls'. SSLCOntext (String protocol) significa ottenere il protocollo client? Non capisco perché funziona nel client che chiamano SSLContext.getInstance ("ssl"). 'ssl' e 'tls' sono diversi tipi di protocollo. Il mio inglese è cattivo, mi dispiace tanto non chiarire la domanda – user1781746

+0

La prima frase è vaga. La seconda frase non è corretta: getInstance() non restituisce "un'istanza del protocollo"; ripete un'istanza di SSLContext. Il paragrafo finale cita un riferimento non normativo e sostanzialmente irrilevante. – EJP

+0

@Angel Invece di giocherellare sull'eliminazione e sul annullamento della cancellazione di questo, perché non * risolvere * esso? – EJP

28

Questo è un rather detailed answer che ho scritto un po 'indietro descrivendo la differenza tra SSL e TLS. In breve, TLS è il successore di SSL e TLS 1.0 può essere considerato come "SSL 3.1".

Se si guarda al JSSE Reference Guide, in the SSLContext section, si dice:

Questi metodi statici ogni ritorno un'istanza che implementa almeno la richiesta protocollo Secure Socket. L'istanza restituita può implementare anche altri protocolli. Ad esempio, getInstance ("TLSv1") può restituire un'istanza che implementa "TLSv1", "TLSv1.1" e "TLSv1.2".

Questo è anche menzionato nel documento Standard Names.

In particolare, se si controlla il codice sorgente Oracle/OpenJDK 7 per SSLContextImpl, si scoprirà che tutti i suoi SSLContext supportano tutti i protocolli (da SSLv3 utilizzando un client SSLv2 Hello a TLS 1.2). Ciò che differisce è che i protocolli sono abilitati di default. Inoltre, non si dovrebbe fare affidamento su questo in generale, poiché altre implementazioni Java (ad esempio IBM JRE) potrebbero comportarsi diversamente.

Se si desidera utilizzare un determinato set di protocolli per una connessione, è necessario utilizzare il metodo SSLSocket o SSLEnginesetEnabledProtocols. In caso contrario, utilizzerà i valori predefiniti, come descritto nello Providers documentation.

Problemi correlati