2011-01-05 13 views
2

Hier fordern ist mein Codejava Fehler gibt auf https

 URL url = new URL(requestUrl); 
     HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

Ich erhalte folgende Ausnahme

java.security.cert.CertificateException: No name matching www.sandbox.freelancer.com found 

Per ich diese Seite weiß nicht richtiges Zertifikat hat. Aber egal wie ich mich einloggen muss. Jeder Vorschlag wird geschätzt. Vielen Dank.

Antwort

3

erstellen Trust-Manager, die keine Zertifikatketten nicht validieren

TrustManager[] trustAllCerts = new TrustManager[]{ 
    new X509TrustManager() { 
     public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
      return null; 
     } 
     public void checkClientTrusted(
      java.security.cert.X509Certificate[] certs, String authType) { 
     } 
     public void checkServerTrusted(
      java.security.cert.X509Certificate[] certs, String authType) { 
     } 
    } 
}; 

Installieren Sie das all-zu vertrauen Trust-Manager

try { 
    SSLContext sc = SSLContext.getInstance("SSL"); 
    sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
} catch (Exception e) { 
} 

nun eine https-URL zugreifen

try { 
    URL url = new URL("https://www.sandbox.freelancer.com"); 
    HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); 
    BufferedReader br = 
     new BufferedReader(new InputStreamReader(conn.getInputStream())); 

} catch (MalformedURLException e) { 
} 
+0

Warum nicht einen Vertrauensmanager erstellen, der nur diesem bestimmten Zertifikat vertraut und standardmäßig nach allen anderen sucht? –

+0

@GregS Ja, das hätte getan werden können, aber ich denke nicht, dass das das Problem lösen wird, wenn ein Zertifikat eine Kette von nicht vertrauenswürdigen Root Certificate Authority hat. –

1

Sie können das Zertifikat speichern (in Firefox abrufen) und dann das Zertifikat zum Keystore hinzufügen und dann Ihre App so konfigurieren, dass sie diesen Keystore verwendet.

+0

Kann ich Zertifikat erhalten direkt aus dem Web ohne Firefox zu benutzen? – Barun