2012-05-07 26 views
12

Estoy tratando de calcular el orden en que se devuelven las suites de cifrado utilizando SSLSocketFactory.getSupportedCipherSuites() - parece diferir entre Java 1.6 & Java 1.7.Java Cipher Suites

Pensé que esto sería fácil de determinar, pero se han encontrado con algunos problemas. En primer lugar, sin embargo, aquí está el código que estoy usando:

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

bastante sencillo (no me corrija si he hecho algo estúpido). Entonces, pensé (usando eclipse) que podría entrar al método getSupportedCipherSuites(), pero parece que el código fuente no está ahí para hacer eso (¿hay alguna razón para eso?). Encontré la clase en jsse.jar y la descompilé usando JD-Eclipse. Esto, sin embargo, me da una clase abstracta y no he podido ver la implementación concreta de la clase abstracta (he descubierto que la clase se puede establecer usando una propiedad "ssl.SocketFactory.provider" pero esto no tiene sido especificado en java.security). Tampoco he podido determinar cómo activar el inicio de sesión utilizando la propiedad "javax.net.debug" (esto desaparece en un método nativo).

¿Podría alguien señalar dónde me estoy equivocando?

+1

supongo que eres nuevo en esto, sino una etiqueta 'getSupportedCipherSuites' sería demasiado específica. (Hay a [discusión sobre Meta] (http://meta.stackexchange.com/questions/131414/merging-ssl-tls-and-related-tags) en este momento sobre la fusión/cambio de nombre de algunas de las etiquetas relacionadas con SSL.) – Bruno

+0

Gracias Bruno. Solo estaba tratando de usar etiquetas de palabras clave que había usado en las búsquedas, lo que supongo que era ingenuo. Solo eché un vistazo a la discusión, uno de esos temas que al principio parece sencillo pero ¡se convierte en algo más! :-) – Amadeus1756

+0

No necesita ingresar al método para ver qué devuelve. Las suites de cifrado han cambiado entre Java 1.6 y 1.7, y es bastante fácil ver que los métodos siempre devuelven lo mismo por versión. – EJP

Respuesta

15

La lista de suites de cifrado admitidas (y habilitadas) está disponible en la documentación del proveedor SunJSSE: para Java 6 y para Java 7. El orden de la lista difiere de hecho.

Debo admitir que nunca he prestado realmente atención al pedido en la lista de la suite de cifrado admitida. El que importa es la lista de suites de cifrado * habilitado

Si le interesa el código en sí, debe encontrarlo en sun.security.ssl.SSLContextImpl y sun.security.ssl.CipherSuite. Tenga en cuenta que estas clases son parte de la implementación de Sun JSSE y no parte de la API pública de Java.

en cuanto a la depuración, encontrará los parámetros necesarios en el Debugging section of the JSSE Reference Guide.

+0

Gracias Bruno. Eso me llevó a http://www.docjar.com/html/api/sun/security/ssl/SSLSocketFactoryImpl.java.html, que me da un punto de partida, así que muchas gracias, muy apreciado. Entonces, por lo que has dicho, ¿el orden de la lista podría diferir para (digamos) el IBM JDK? ¿Y la implementación de OpenJDK podría diferir de la de Sun/Oracle JDK? – Amadeus1756

+0

Sí, la orden podría diferir con otra implementación de JRE (por ejemplo, IBM). El OpenJDK JRE debe estar mucho más cerca del Sun/Oracle JRE, ya que son más o menos la misma base de código (puede obtener diferencias sutiles dependiendo de los números de versión menores). – Bruno

+0

Parece que el orden en el IBM JRE es bastante similar, pero parece que [el IBM JRE 6 tiene soporte para TLS 1.1/1.2 y sus suites de cifrado] (http://www.ibm.com/developerworks/java/jdk /security/60/secguides/jsse2Docs/JSSE2RefGuide.html#AppA) (no disponible en Oracle JRE 6). – Bruno

Cuestiones relacionadas