Java ApacheWink连接到https资源
我从ApacheWinkWeb服务向位于云中的外部资源发送请求(我无法将证书放入JVM),我知道当我尝试从浏览器发出请求时,我得到了正确的答案Java ApacheWink连接到https资源,java,web-services,rest,ssl,apache-wink,Java,Web Services,Rest,Ssl,Apache Wink,我从ApacheWinkWeb服务向位于云中的外部资源发送请求(我无法将证书放入JVM),我知道当我尝试从浏览器发出请求时,我得到了正确的答案 String serviceURL = "https://someurl&ciUser=user&ciPassword=password"; ClientConfig clientConfig = new ClientConfig(); clientConfig.setBypassHostnameVerification(true);
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)
更新
我也尝试了这个,但得到了同样的错误
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);
有可能解决这个问题吗 尝试以下步骤
keytool -import -trustcacerts -alias localhost -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -file "D:/apache tomcat 6/bin/example.cer"
虽然这是一个老问题,但我想在这里粘贴我的代码,如果您想在使用Wink客户端时信任所有证书,这应该会很有帮助:
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());
}
}
谢谢你的重播。但我在上面写道“我不能将证书放入JVM”