2010-07-02 7 views
6

Deseamos comprar un certificado SSL comodín ya que tenemos muchos subdominios. Sin embargo, no sé si Java confía en los certificados de comodín. A medida que las personas se conecten a nuestra API a través de SSL, no será suficiente forzar a todas las terceras partes con las que nos comuniquemos a agregar nuestro certificado SSL a su almacén de confianza local.Can Java connect to wildcard ssl

Por el momento me enfrenta un dilema para comprar un certificado comodín de un emisor de confianza de Java o comprar varios certificados uno por subdominio.

¿Hay otros idiomas que también tengan un almacén de confianza? Si es así, ¿alguien sabe si los certificados comodín también funcionan con ellos?

+0

es una bonita pieza de información y fue útil para mí. – Allen

+1

Wildcard ssl no es lo mismo en absoluto que confiar en todos los certificados. Wildcard SSL es * .domain.com. También esta pregunta es 4 años más antigua que la otra pregunta. Cierra esto si quieres pero no es lo mismo en absoluto. – Wes

Respuesta

2

He intentado esto con Java 6.

Parece que funciona correctamente. He leído con éxito los encabezados y el contenido del cuerpo de un archivo que tenía un certificado SSL comodín.

package com.example.test; 

import java.io.DataInputStream; 
import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.Iterator; 
import java.util.List; 
import java.util.Map; 
import java.util.Map.Entry; 


public class SSLTEST { 
    public static void main(String[] args) { 
     try { 
      URL url = new URL("https://test.example.com/robots.txt"); 
      URLConnection connection = null; 
      try { 
       connection = url.openConnection(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      Map<String, List<String>> fields = connection.getHeaderFields(); 
      Iterator<Entry<String, List<String>>> headerIterator = fields.entrySet().iterator(); 
      System.out.println("HEADERS"); 
      System.out.println("-------------------------------"); 
      while (headerIterator.hasNext()){ 
       Entry<String, List<String>> header = headerIterator.next(); 
       System.out.println(header.getKey()+" :"); 
       Iterator<String> valueIterator = header.getValue().iterator(); 
       while (valueIterator.hasNext()){ 
        System.out.println("\t"+valueIterator.next()); 
       } 

      } 

      String inputLine; 
      DataInputStream input = new DataInputStream(connection.getInputStream()); 
      System.out.println("BODY CONTENT"); 
      System.out.println("-------------------------------"); 
      while ((inputLine = input.readLine()) != null) { 
       System.out.println(inputLine); 
      } 


     } catch (MalformedURLException e) { 
      System.err.println(e); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

EDITAR he acaba de recibir la confirmación de que esto funciona en Java 1.5

+0

¿Pero se supone que este código funciona con un certificado SSL comodín que fue la pregunta original? Cuando pruebo este código en un servidor con un certificado de comodín obtengo una SSLHandshakeException porque la ruta de validación falla. –

+1

@Petri Pellinen Funcionó para un dominio válido para mí con el certificado de Verisign. Puede tener menos suerte con un certificado autofirmado. También los certificados modernos necesitan el certificado intermedio cuando se usa una versión anterior de java 6. (Según mis pruebas) – Wes

+0

gracias por la aclaración –

6

La implementación predeterminada en JSSE de Sun no admite caracteres comodín. Necesita escribir su propio X509TrustManager para manejar el comodín.

Sin embargo, Java admite SAN (Nombres alternativos del sujeto) desde Java 5. Si tiene menos de 20 nombres, puede obtener un certificado para todos ellos. Puede ser más económico que un certificado de comodín.

+0

Estaba pensando más en las partes externas que se conectaban a nuestra API que en nuestro código Java que se conectaba a un subdominio protegido comodín. Voy a agregar eso a la pregunta para asegurar que quede claro. – Wes

+0

La verificación del nombre de host no se realiza en el administrador de confianza. – Bruno

+0

Java definitivamente admite certificados de comodín en 2017 e incluso en java 6 ver otra respuesta. – Wes