2010-07-02 13 views
6

Chcemy kupić certyfikat SSL wieloznaczny jak mamy wiele subdomen. Nie wiem jednak, czy Java ufa certyfikatom z dziką kartą. Ponieważ ludzie łączą się z naszym interfejsem API za pośrednictwem protokołu SSL, nie będziemy w stanie zmusić wszystkich stron trzecich, z którymi się komunikujemy, do dodania naszego certyfikatu SSL do lokalnego magazynu zaufanych certyfikatów.Can Java połączyć Wildcard SSL

W tej chwili mam przed dylematem zakupu certyfikatu wieloznacznego z java zaufany emitenta lub Kup kilka certyfikatów jeden na sub-domeny.

Czy inne języki mają także magazynu zaufanych certyfikatów? Jeśli tak, to ktoś wie, czy certyfikaty wieloznaczne również z nimi współpracują.

+0

jej ładny kawałek informacji i to było przydatne do mnie. – Allen

+1

Wildcard ssl to nie to samo, co zaufanie do wszystkich certyfikatów. Wildcard SSL to * .domain.com. Również to pytanie jest o 4 lata starsze niż inne pytanie. Zamknij to, jeśli chcesz, ale to nie jest to samo. – Wes

Odpowiedz

2

Mam próbował to z java 6.

Wydaje się działać poprawnie. Z powodzeniem odczytałem nagłówki i zawartość treści z pliku z certyfikatem SSL z wildcard.

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 Właśnie otrzymaliśmy potwierdzenie, że to działa na Java 1.5

+0

Ale czy ten kod powinien działać z certyfikatem SSL z symbolem wieloznacznym, który był oryginalnym pytaniem? Kiedy próbuję tego kodu na serwerze z certyfikatem wieloznacznym, otrzymuję wyjątek SSLHandshakeException, ponieważ ścieżka sprawdzania poprawności kończy się niepowodzeniem. –

+1

@Petri Pellinen To działało dla ważnej domeny dla mnie z certyfikatem verisign. Możesz mieć mniej szczęścia dzięki samopodpisaniu certyfikatu. Również nowoczesne certyfikaty wymagają pośredniego certyfikatu podczas używania starszej wersji java 6. (zgodnie z moimi testami) – Wes

+0

dzięki za wyjaśnienie –

6

Wdrożenie domyślne JSSE Sun nie obsługuje wieloznacznego. Musisz napisać własny X509TrustManager, aby obsługiwać symbole wieloznaczne.

Jednak Java obsługuje SAN (z zastrzeżeniem nazwiska i pseudonimy) od Java 5. Jeśli masz mniej niż 20 nazw, można uzyskać jeden certyfikat dla nich wszystkich. Może być tańszy niż certyfikat wieloznaczny.

+0

Myślałem raczej o zewnętrznych podmiotach łączących się z naszym interfejsem API, a nie o kodzie Java łączącym się z poddomeną zabezpieczoną pod-domeną. Zamierzam dodać to do pytania, aby upewnić się, że jest jasne. – Wes

+0

Weryfikacja nazwy hosta nie jest wykonywana w menedżerze zaufania. – Bruno

+0

Java na pewno obsługuje certyfikaty wieloznaczne w 2017 r., A nawet zrobiła to w java 6 zobacz inną odpowiedź. – Wes