2009-11-26 7 views
20

Mi viene visualizzato questo errore "HTTPS hostname errato:" durante il tentativo di connessione a un server tramite https. Il mio URL simile a questaNome host HTTPS errato: dovrebbe essere <sub.domain.com>. Che cosa causa questo?

https://sub.domain.com/tamnode/webapps/app/servlet. 

ho connettersi utilizzando il seguente codice

// Create a URLConnection object for a URL 
    URL url = new URL(requestedURL); 
    HttpURLConnection.setFollowRedirects(false); 

    // connect 
    connection = (HttpURLConnection) url.openConnection(); 
    connection.setDoOutput(true); 
    connection.setRequestProperty("User-Agent", USER_AGENT); //$NON-NLS-1$ 

    OutputStreamWriter wr = new OutputStreamWriter(connection 
      .getOutputStream()); 

ma poi un errore

IOException: HTTPS hostname wrong: should be <sub.domain.com>. 
    at sun.net.www.protocol.https.HttpsClient.checkURLSpoofing 
    .... 

Questo è il codice che ha lavorato in passato, ma non è più . Ci sono state alcune modifiche all'architettura del sistema, ma ho bisogno di ottenere più dati prima di avvicinarmi ai responsabili.

Cosa può causare questo errore? Posso disattivare il controllo URLSpoofing?

risposta

16

Sembra che il certificato SSL per domain.com sia stato assegnato a sub.domain.com. O, più probabilmente, ciò che è stato domain.com è stato rinominato in sub.domain.com senza aggiornare il certificato SSL.

13

cletus ha ragione circa la causa probabile.

C'è anche un modo per disattivare il controllo spoof.

È possibile creare un oggetto che implementa HostnameVerifier che restituisce true in più circostanze di "normale".

Sostituire l'hostnameVerifier predefinito chiamando setHostnameVerifier sull'oggetto connessione nel codice nella domanda.

Questa risposta è stata 'ispirata da': http://www.java-samples.com/showtutorial.php?tutorialid=211

ho scoperto che legame con questa query: http://www.google.com/search?q=https+hostname+wrong+should+be

più Una nota: pensateci due volte prima di fare questo. Creerai una debolezza sfruttabile nella sicurezza tra i componenti client e server.

+0

I 2 collegamenti oracolo sono interrotti –

+0

@ stuart-siegler: grazie per l'avviso. – vkraemer

+0

Nomehost Il trucco del destinatario ha funzionato per me – nilesh

8

Ho ricevuto questa eccezione - java.io.IOException: HTTPS hostname wrong: should be <localhost>.

La mia soluzione è Ho cambiato il mio certificato autofirmato e rendere il CN=localhost.

O

Aggiungere il certificato domain-name cn=<domain-name> al file host, probabilmente situato a c:/windows/system32/drivers/etc/...

+0

Grazie. Fare CN = localhost ha funzionato come un incantesimo! – siddagrl

3

Thi risolvere il mio problema

static { 
    //for localhost testing only 
    javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
    new javax.net.ssl.HostnameVerifier(){ 

      @Override 
     public boolean verify(String hostname, 
       javax.net.ssl.SSLSession sslSession) { 
      if (hostname.equals("your_domain")) { 
       return true; 
      } 
      return false; 
     } 
    }); 
} 
+0

Non si dovrebbe scrivere il codice 'solo per i test'. Inevitabilmente si perde nella produzione e compromette la sicurezza del sistema. – EJP

Problemi correlati