1

Функцией запроса в АФИ неисправная за исключением следующего:SSLHandshakeException с ралли отдыха апи

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 

Для борьбы с этим исключения, я вручную загрузил сертификат и импортировать его в cacerts и все работает, как освобожденные. Но срок действия этого сертификата установлен на несколько дней, что делает это решение нежизнеспособным.

Для целей тестирования я создал стратегию доверия для всех сертификатов, но не могу найти способ ее интеграции с Rest Api. Я использую HttpClient 4.4.

Как мне пройти эту проблему? Благодарю.

+0

Есть ли причина, по которой вы не можете использовать Rally Rest Toolkit для Java? https://github.com/RallyTools/RallyRestToolkitForJava –

+0

Я использую Rally Rest Toolkit для java. Проблема возникает в функции запроса api. Получите это SSLhandshakeException на этом этапе. Я могу временно решить эту проблему, добавив сертификат в доверенное хранилище ключей, но срок действия установлен на небольшой диапазон. – Tontodoin

ответ

1

Вы написали, что хотите найти способ разрешить все сертификаты и использовать HttpClient с Rally Rest Toolkit для Java. Вот как вы можете получить доступ к HttpClient из restApi:

HttpClient client = restApi.getClient(); 

Вот пример, который доверяет все сертификаты, например, самоподписанные сертификаты:

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

Это сработало для меня. Спасибо! – Tontodoin

Смежные вопросы