Frage

Ich erhalte diesen ‚HTTPS Hostnamen falsch:‘ Fehler, wenn auf einen Server über https zu verbinden versucht. Meine URL sieht etwa so aus

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

Ich verbinde mit dem folgenden Code

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

dann aber einen Fehler

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

Dies ist Code, der in der Vergangenheit gearbeitet hat, aber nicht mehr. Es wird an die Systemarchitektur einige Änderungen, aber ich brauche, um mehr Daten zu erhalten, bevor die Verantwortlichen.

Annäherung

Was kann diesen Fehler verursachen? Kann ich die URLSpoofing Prüfung deaktivieren?

War es hilfreich?

Lösung

Es sieht aus wie das SSL-Zertifikat für domain.com zu sub.domain.com gegeben wurde. Oder, was wahrscheinlicher ist, was domain.com zu sub.domain.com umbenannt wurde, ohne das SSL-Zertifikat zu aktualisieren.

Andere Tipps

cletus ist direkt über die wahrscheinliche Ursache.

Es gibt einen Weg, um die Täuschungsprüfung zu deaktivieren, zu.

Sie können ein Objekt erstellen, die Arbeitsgeräte setHostnameVerifier auf dem Verbindungsobjekt in dem Code in der Frage.

Diese Antwort wurde inspiriert von ': http://www.java -samples.com/showtutorial.php?tutorialid=211

fand ich diesen Link mit dieser Abfrage: http: / /www.google.com/search?q=https+hostname+wrong+should+be

Noch eine Anmerkung: zweimal überlegen, bevor Sie dies tun. Sie erhalten eine ausnutzbare Schwachstelle in der Sicherheit zwischen Client- und Serverkomponenten erstellen.

Ich habe diese Ausnahme -. java.io.IOException: HTTPS hostname wrong: should be <localhost>

Meine Lösung ist, ich meine selbstsignierten geändert Zertifikat und die CN=localhost machen.

oder

Fügen Sie Ihr Zertifikat Domain-Namen cn=<domain-name> auf Ihre Host-Datei wahrscheinlich auf C: / windows / system32 / drivers / etc /...

Der folgende Code behoben mein Problem

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

Verwenden Sie den Hostnamen (DNS-Name) als Aliasname.

Beispiel:

keytool -import -alias <google.com> -file certificate_one.cer -keystore cacerts

Java standardmäßig überprüft, ob das Zertifikat CN (Common Name) die gleichen wie Hostnamen in der URL ist. Wenn die CN in dem Zertifikat ist nicht das gleiche wie der Hostname , Ihr Web-Service-Client schlägt mit folgenden Ausnahme: java.io.IOException: HTTPS Hostnamen falsch: sollte Hostnamen als in den Zertifikaten werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top