2016-04-25 25 views
1

Die Abfrage-Funktion in der api mit folgenden Ausnahme versagt:SSLHandshakeException mit Rally Rest api

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

diese Ausnahme zu begegnen, die ich heruntergeladen habe das Zertifikat manuell und importierte sie cacerts und alles funktioniert wie vorbehalten. Die Gültigkeitsdauer dieses Zertifikats wurde jedoch auf einige Tage festgelegt, wodurch diese Lösung nicht mehr funktionsfähig ist.

Zu Testzwecken habe ich eine Trust-Strategie erstellt, um alle Zertifikate zuzulassen, aber ich finde keine Möglichkeit, sie mit Rest Api zu integrieren. Ich benutze HttpClient 4.4.

Wie komme ich an diesem Problem vorbei? Vielen Dank.

+0

Gibt es einen Grund, warum Sie das Rally Rest Toolkit für Java nicht verwenden können? https://github.com/RallyTools/RallyRestToolkitForJava –

+0

Ich benutze das Rally Rest Toolkit für Java. Das Problem tritt in der Abfragefunktion der API auf. Sie erhalten diese SSLhandshakeException in diesem Stadium. Ich kann dieses Problem vorübergehend beheben, indem ich das Zertifikat im vertrauenswürdigen Keystore hinzufüge, aber die Gültigkeit wird auf einen kleinen Bereich festgelegt. – Tontodoin

Antwort

1

Sie haben geschrieben, dass Sie eine Möglichkeit finden möchten, alle Zertifikate zuzulassen, und verwenden Sie HttpClient mit Rally Rest Toolkit für Java. Hier ist, wie Sie Httpclient von restApi zugreifen:

HttpClient client = restApi.getClient(); 

Hier ist ein Beispiel, das alle certs vertraut, z.B. selbstsignierte Zertifikate:

public class ConnnectionTestWithHTTPClient { 

    public static void main(String[] args) throws URISyntaxException, IOException { 


     String host = "https://rally1.rallydev.com"; 
     String apiKey = "_abc123"; 
     String applicationName = "Connnection Test With HTTPClient"; 
     RallyRestApi restApi = new RallyRestApi(new URI(host),apiKey); 
     restApi.setApplicationName(applicationName); 
     //restApi.setProxy(new URI("http://myproxy.mycompany.com"), "MyProxyUsername", "MyProxyPassword"); //YOUR PROXY SETTINGS HERE 
     HttpClient client = restApi.getClient(); 
     try { 
      SSLSocketFactory sf = new SSLSocketFactory(new TrustStrategy() { 
       public boolean isTrusted(X509Certificate[] certificate, String authType) 
        throws CertificateException { 
        //trust all certs 
        return true; 
       } 
      }, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 
      client.getConnectionManager().getSchemeRegistry().register(new Scheme("https", 443, sf)); 

      String workspaceRef = "/workspace/12345"; 
      GetRequest getRequest = new GetRequest(workspaceRef); 
      GetResponse getResponse = restApi.get(getRequest); 
      System.out.println(getResponse.getObject()); 
     } catch (Exception e) { 
      System.out.println(e); 
     } finally { 
      restApi.close(); 
     } 
    } 
} 
+0

Das hat bei mir funktioniert. Vielen Dank! – Tontodoin