0

我有一个 JavaFX 客户端,它需要使用通过 SSL 托管的 Web 服务,例如:https ://myserver.com/testservice/getdata 。

当我尝试从 JavaFX 客户端访问此服务时,出现异常:javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching localhost found

我搜索了这个异常,发现需要插入以下代码才能摆脱这个异常:

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。

4

0 回答 0