2013-12-16 5 views
2

Я отправляю запрос на внешний ресурс, который находится в облаке (я не могу поместить сертификаты в JVM) из веб-службы Apache Wink, и я знаю, что когда я пытаюсь сделать запрос из браузера я получаю правильный ответ.Apache Wink подключиться к ресурсам https

String serviceURL = "https://someurl&ciUser=user&ciPassword=password"; 

ClientConfig clientConfig = new ClientConfig(); 
clientConfig.setBypassHostnameVerification(true); 

RestClient client = new RestClient(clientConfig); 

Resource resource = client.resource(serviceURL); 

Но я получаю следующее исключение:

[err] org.apache.wink.client.ClientRuntimeException: java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake 
[err] at org.apache.wink.client.internal.ResourceImpl.invoke(ResourceImpl.java:240) 
[err] at org.apache.wink.client.internal.ResourceImpl.invoke(ResourceImpl.java:189) 
[err] at org.apache.wink.client.internal.ResourceImpl.get(ResourceImpl.java:302) 

UPDATE

Я также попробовать это, но получить те же ошибки

String serviceURL = "https://url&ciUser=user&ciPassword=password"; 

//Perform basic http auth 
ClientConfig clientConfig = new ClientConfig(); 
BasicAuthSecurityHandler basicAuthSecurityHandler = new BasicAuthSecurityHandler("user", "password"); 
clientConfig.handlers(basicAuthSecurityHandler); 

RestClient client = new RestClient(clientConfig); 

Можно ли решить эту проблему?

ответ

0

Попробуйте ниже шаги

  1. запустить приложение по протоколу HTTPS с JKS файл я экспорта.

  2. посмотреть сертификаты с браузером.

  3. Экспорт и сохранить в файл .cer

  4. импортировать его с Java Keytool.

это команда:

keytool -import -trustcacerts -alias localhost -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -file "D:/apache tomcat 6/bin/example.cer" 
+0

Спасибо за повтор. Но я написал выше: «Я не могу поместить сертификаты в JVM» – Ray

0

Хотя это старый вопрос, я хотел бы, чтобы вставить свой код здесь, это должно быть полезно, если вы хотите доверить все сертификаты при использовании подмигивания Клиент:

public static void doRequest() { 
    ClientConfig config = new ClientConfig(); 
    RestClient restClient = new RestClient(config); 
    Resource resource = restClient.resource(serviceURL); 
    trustAllCertificates();//trust all certificates before doing the request 
    ClientResponse clientResponse = resource.get(); 
} 
public static void trustAllCertificates() throws RuntimeException { 
    try { 
     TrustManager[] trustManager = new TrustManager[] { 
      new X509TrustManager() { 
       @Override 
       public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
        return null; 
       } 
       @Override 
       public void checkClientTrusted(
        java.security.cert.X509Certificate[] certs, String authType) { 
       } 
       @Override 
       public void checkServerTrusted(
        java.security.cert.X509Certificate[] certs, String authType) { 
       } 
      } 
     }; 

     SSLContext sc = SSLContext.getInstance("TLS");//or SSL, it depends on the certificate 
     sc.init(null, trustManager, new java.security.SecureRandom()); 
     HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 

    } catch (NoSuchAlgorithmException e) { 
     throw new RuntimeException(e.getMessage()); 
    } catch (KeyManagementException e) { 
     throw new RuntimeException(e.getMessage()); 
    } 
} 

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

  • Нет связанных вопросов^_^