2012-05-07 9 views
12

Ich versuche herauszufinden, die Reihenfolge der Cipher Suites zurückgegeben werden mit SSLSocketFactory.getSupportedCipherSuites() - es scheint sich zwischen Java 1.6 & Java 1.7 zu unterscheiden.Java Cipher Suites

Ich dachte, das wäre leicht zu bestimmen, aber habe ein paar Probleme festgestellt. Zunächst aber hier ist der Code Ich verwende:

SSLContext context = SSLContext.getDefault(); 
SSLSocketFactory sf = context.getSocketFactory(); 
String[] cipherSuites = sf.getSupportedCipherSuites(); 

recht einfach (bitte korrigiert mich wenn ich etwas Dummes getan haben). Also, ich dachte (mit Eclipse), dass ich in der Lage sein könnte, in die getSupportedCipherSuites() -Methode, aber es scheint, der Quellcode ist nicht da, um das zu tun (gibt es einen Grund dafür?). Ich fand die Klasse in jsse.jar und dekompilierte sie mit JD-Eclipse. Dies gibt mir jedoch eine abstrakte Klasse und ich konnte die konkrete Implementierung der abstrakten Klasse nicht sehen (Ich habe festgestellt, dass die Klasse mit einer Eigenschaft "ssl.SocketFactory.provider" festgelegt werden kann, aber das hat nicht getan in java.security angegeben). Ich konnte auch nicht feststellen, wie die Anmeldung mit der Eigenschaft "javax.net.debug" aktiviert wird (dies verschwindet in einer nativen Methode).

Könnte jemand darauf hinweisen, wo ich falsch liege?

+1

ich denke, Sie SO sind neu, aber ein 'getSupportedCipherSuites' Tag wäre viel zu spezifisch sein. (Es gibt eine [Diskussion über Meta] (http://meta.stackexchange.com/questions/131414/merging-ssl-tls-and-related-tags) im Moment über das Zusammenführen/Umbenennen einiger der SSL-bezogenen Tags.) – Bruno

+0

Danke Bruno. Ich habe nur versucht, Stichwörter zu verwenden, die ich bei Suchanfragen verwendet habe, von denen ich denke, dass sie naiv waren. Ich habe mir nur ein wenig die Diskussion angeschaut - eines der Themen, die anfangs sehr geradlinig wirken, aber etwas mehr werden! :-) – Amadeus1756

+0

Sie müssen nicht in die Methode treten, um zu sehen, was sie zurückgibt. Die Cipher Suites haben sich zwischen Java 1.6 und 1.7 geändert, und es ist leicht zu sehen, dass die Methoden immer die gleiche Sache pro Version zurückgeben. – EJP

Antwort

15

Die Liste der unterstützten (und aktivierten) Cipher Suites ist in der SunJSSE-Provider-Dokumentation verfügbar: für Java 6 und für Java 7. Die Reihenfolge der Listen ist in der Tat unterschiedlich.

Ich muss zugeben, ich habe nie wirklich auf die Bestellung in der unterstützt Cipher Suite Liste aufgepasst. Wichtig ist die Liste der aktivierten Verschlüsselungssuiten.

Wenn Sie sich für den Code selbst interessieren, sollten Sie ihn in sun.security.ssl.SSLContextImpl und sun.security.ssl.CipherSuite finden. Beachten Sie, dass diese Klassen Teil der Sun JSSE-Implementierung sind und nicht Teil davon sind der öffentlichen Java-API.

Debuggen Bezug, werden Sie die erforderlichen Parameter im Debugging section of the JSSE Reference Guide zu finden.

+0

Danke Bruno. Das führte mich zu http://www.docjar.com/html/api/sun/security/ssl/SSLSocketFactoryImpl.java.html, was mir einen Startpunkt gibt, also danke - sehr geschätzt. Aus dem, was Sie gesagt haben, könnte sich die Reihenfolge der Liste für (sagen wir) das IBM JDK unterscheiden? Und die OpenJDK-Implementierung könnte sich vom Sun/Oracle JDK unterscheiden? – Amadeus1756

+0

Ja, die Reihenfolge kann sich bei einer anderen JRE-Implementierung unterscheiden (z. B. IBM). Die OpenJDK-JRE sollte näher an der Sun/Oracle-JRE liegen, da sie mehr oder weniger die gleiche Codebasis hat (Sie können je nach Versionsnummer geringfügige Unterschiede feststellen). – Bruno

+0

Es sieht so aus, als ob die Reihenfolge in der IBM JRE ziemlich ähnlich ist, aber es scheint [die IBM JRE 6 unterstützt TLS 1.1/1.2 und ihre Cipher Suites] (http://www.ibm.com/developerworks/java/jdk) /security/60/secguides/jsse2Docs/JSS2RefGuide.html#AppA) (nicht in Oracle JRE 6 verfügbar). – Bruno