JavaFX:使用安全的RESTful服务

时间:2013-10-14 14:06:33

标签: java ssl https javafx-2 thick-client

我有一个需要使用通过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发送请求

0 个答案:

没有答案