我有一个需要使用通过SSL托管的Web服务的JavaFX客户端,例如:https://myserver.com/testservice/getdata。
当我尝试从JavaFX客户端访问此服务时,我得到异常:javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException:找不到与localhost匹配的名称
我搜索了这个异常,发现需要插入以下代码来摆脱这个异常:
static {
//for localhost testing only
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
new javax.net.ssl.HostnameVerifier(){
public boolean verify(String hostname,
javax.net.ssl.SSLSession sslSession) {
if (hostname.equals("localhost")) {
return true;
}
return false;
}
});
}
但是,这段代码只是忽略了服务的本地设置。您能否指导一下我缺少的内容,以便使用通过SSL托管的RESTful服务?
在JavaFX客户端,我尝试使用以下代码访问服务:
public List<String> getData() throws IOException
{
String servicesUrl = "https://myserver.com/testservice/getdata";
try
{
URL url = new URLservicesUrl
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK)
{
String data = restTemplate.getForObject(servicesUrl, String.class);
return data;
}
}
catch (IOException ioex)
{
ioex.printStackTrace();
}
}
我确实尝试过使用HttpsURLConnection API,但没有任何成功。
我认为JavaFX客户端需要能够验证证书或进行某种握手,这是由浏览器自动处理的,但在这种情况下,胖客户端不会通过https向URL发送请求