2016-06-11 7 views
2

ich drei Fragen haben, wenn ich okhttp zum Inhalt dieser Web-Sites zu erhalten:Java okhttp Probleme in Redirect Zählung und Domain-cert

  1. http://www.wp.com hat Fehler mit: javax.net.ssl.SSLHandshakeException: Sonne .security.validator.ValidatorException: PKIX Pfad Gebäude fehlgeschlagen: sun.security.provider.certpath.SunCertPathBuilderException: nicht in der Lage zu gültigen Zertifizierungspfad zu angeforderten Ziel

  2. http://www.macys.com hat Fehler zu finden: java.net.ProtocolException: zu viele nachverfolgen Anfragen: 21

  3. http://www.vk.me hat Fehler mit: javax.net.ssl.SSLPeerUnverifiedException: Hostname www.vk.me nicht überprüft: Zertifikat: sha256/Sx09coMBYByu6GDlS0E6daYLDVLydbmJjFNkTANfSg4 = DN: CN = .vk.com, OU = Domain Control Validated subjectAltNames: [ .vk.com, vk.com]

bei 2016.06.12 AKTUALISIERT:

  1. http://www.wordpress.com hat Fehler mit: javax.net.ssl.SSLHandshakeException: Remote-Host-Anschluss
  2. während Händedruck geschlossen

Wie zu beheben oben gibt 1-4? Danke allen!

Antwort

2

Da die Seiten haben nicht beeinträchtigt worden:

(1) Sie sind die Wurzel-CA-Zertifikat in Ihrem vertrauenswürdigen Speicher fehlt. Dies kann passieren, wenn die von der Website verwendete Zertifizierungsstelle nicht mit dem jdk ausgeliefert wird. Sie müssen es manuell im vertrauenswürdigen Speicher mithilfe von keytool hinzufügen.

(2) Ich recherchierte den Fehler und stellte fest, dass dies von okhttp Client ausgelöst wird, wenn es mehr als 20 Weiterleitungsanforderungen empfängt. Meine Quelle ist dies: https://github.com/square/retrofit/issues/1561

Update: Ich habe gerade einen Browser laden Seite Trace für macys.com. Beeindruckend sollte man sich die Erfahrung machen :-) Die Weiterleitungen sind das normale Ladeverhalten der Seite, die Schriftart wird zigmal umgelenkt.

OkHTTP implementiert den maximalen Umleitungswert von 20 als fest codierten Wert. https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/internal/http/HttpEngine.java (Zeile 91)

(3) Der Domänenname im Zertifikat stimmt nicht mit dem vorgelegten Zertifikat überein. Dies ist ein häufiger Fehler auf mehrfach vernetzten Seiten.

zu beheben (1), neben der CA Hinzufügen Sie die Java-SSL-Zertifikat Pfad Validator implementieren könnte, wie hier beschrieben http://docs.oracle.com/javase/7/docs/technotes/guides/security/certpath/CertPathProgGuide.html#ValidationClasses

zu beheben (3) Sie Trustmanager implementieren müssen, wie hier beschrieben SSL Certificate Verification in Java

+0

Warum kann ich nicht für 2 sagen? es ist ein Fehler in okhttp 3.3.1? –

+0

Nein, ich weiß nicht, was mit 2 passiert ist :-) – thst

+0

Ich habe die Gründe für (2) nachgeschlagen und meine Antwort aktualisiert. – thst

1

Für Ihre dritte Ausgabe, können Sie versuchen, die folgenden

private HostnameVerifier getHostnameVerifier() { 
    return new HostnameVerifier() { 
     @Override 
     public boolean verify(String hostname, SSLSession session) {    
      HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier(); 
      return hv.verify(".vk.com", session); 
     } 
    }; 
} 

dann

OkHttpClient client = new OkHttpClient.Builder()   
     .hostnameVerifier(getHostnameVerifier()) 
     .build(); 
+0

In der Tat, wenn es nicht weiß, was Website Domain-Name, wie kann ich es tun ? Das Programm ist zur Überwachung von Websites nach den Anforderungen des Benutzers, und Domain-Name ist nicht nur "www.vk.com", sondern auch andere Website, wie kann man sie zusammen ignorieren? –

+0

Natürlich weiß ich, wenn immer wieder wahr, es wird Sicherheitsprobleme, eine andere Möglichkeit, es zu beheben, jede andere Lösung? –

+0

kehren Sie bedingungslos zurück, uh oh schlecht thomas nein das ist baaaaad style .... – thst