如何绕过Java的CertificateException?

时间:2013-11-25 10:54:52

标签: java ssl https webservice-client

我正在尝试向服务器发送请求但它遇到以下错误,因为我知道应该创建一个证书但不知道如何做。我发现了这个answer但无法实现它。

java.security.cert.CertificateException: No subject alternative DNS name matching www.example.com found.

代码

        URL url = new URL("https://www.example.com:1897/services/myservice");

        HttpsURLConnection con = (HttpsURLConnection) url.openConnection();

        con.setRequestMethod("POST");
        con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        con.setDoOutput(true);
        con.setDoInput(true);

        OutputStream os = con.getOutputStream();
        m.marshal(auth, os);
        m.marshal(auth, System.out);

        os.flush();
        con.getResponseCode();

1 个答案:

答案 0 :(得分:1)

服务器可能正在使用缺少适当扩展名的证书。您可以禁用主机名验证(这会产生安全问题),也可以在服务器上安装适当的证书(如果不是您的服务器,则可能很难)。

更具体地说,我猜服务器证书包含主题备用名称扩展名,但该扩展名不包含服务器的主机名,或者没有SAN扩展名和主题的公共名称属性名称与服务器不匹配。在任何一种情况下,解决方案都是在SAN扩展中获取具有正确服务器主机名的证书。