2010-07-02 7 views
6

Nous souhaitons acheter un certificat SSL wild-card car nous avons beaucoup de sous-domaines. Cependant, je ne sais pas si Java approuve les certificats génériques. Comme les gens se connectent à notre API via SSL, il ne sera pas suffisant pour nous d'obliger tous les tiers avec lesquels nous communiquons à ajouter notre certificat SSL dans leur truststore local. À l'heure actuelle, je suis confronté à un dilemme: acheter un certificat générique chez un émetteur de confiance java ou acheter plusieurs certificats un par sous-domaine.Est-ce que Java peut se connecter au wild ssl

Les autres langues ont-elles également un fichier de clés certifiées? Si oui, quelqu'un sait-il si les certificats génériques fonctionnent également avec eux?

+0

est un joli morceau d'information et il m'a été utile. – Allen

+1

Wildcard ssl n'est pas la même chose que la confiance de tous les certificats. SSL générique est * .domain.com. Aussi cette question est 4 ans plus vieille que l'autre question. Fermez-le si vous voulez mais ce n'est pas du tout la même chose. – Wes

Répondre

2

J'ai essayé cela avec java 6.

Il semble fonctionner correctement. J'ai lu avec succès les en-têtes et le contenu du corps à partir d'un fichier contenant un certificat SSL générique.

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

EDIT Je viens recieved confirmation que cela fonctionne sur Java 1.5

+0

Mais est-ce que ce code est supposé fonctionner avec un certificat SSL générique qui était la question originale? Lorsque j'essaie ce code sur un serveur avec un certificat générique, j'obtiens une exception SSLHandshakeException car le chemin de validation échoue. –

+1

@Petri Pellinen Cela a fonctionné pour un Domain valide pour moi avec le certificat de verisign. Vous pouvez avoir moins de chance avec un certificat auto-signé. Aussi les certificats modernes ont besoin du certificat intermédiaire en utilisant une ancienne version de Java 6. (Selon mes tests) – Wes

+0

merci pour la clarification –

6

L'implémentation par défaut dans JSSE de Sun ne prend pas en charge les caractères génériques. Vous devez écrire votre propre X509TrustManager pour gérer les caractères génériques. Toutefois, Java prend en charge SAN (Subject Alternative Names) depuis Java 5. Si vous avez moins de 20 noms, vous pouvez obtenir un certificat pour chacun d'entre eux. Il peut être moins cher qu'un certificat générique.

+0

Je pensais plutôt aux parties externes se connectant à notre API plutôt qu'à notre code Java se connectant à un sous-domaine sécurisé. Je vais ajouter cela à la question pour que ce soit clair. – Wes

+0

La vérification du nom d'hôte n'est pas effectuée dans le gestionnaire de confiance. – Bruno

+0

Java prend définitivement en charge les certificats wildcard en 2017 et a même fait en Java 6 voir l'autre réponse. – Wes