无法从java客户端调用HTTPS不受信任的URL

无法从java客户端调用HTTPS不受信任的URL,java,https,Java,Https,我想从java调用https url,但它不受信任,而且它没有域名,只有ip(公共或私有)。 当我调用一个带有不可信证书的域名的url时,它会工作。 但是对于IP地址,它不起作用。这是我得到的错误和源代码。 你能告诉我是什么问题和解决方法吗 谢谢大家! 错误: java.io.IOException: HTTPS hostname wrong: should be <xxx.xxx.xxx.xxx> 与某些浏览器不同,Oracle的主机名验证器Java实现在使用IP地址(而不是主

我想从java调用https url,但它不受信任,而且它没有域名,只有ip(公共或私有)。 当我调用一个带有不可信证书的域名的url时,它会工作。 但是对于IP地址,它不起作用。这是我得到的错误和源代码。 你能告诉我是什么问题和解决方法吗

谢谢大家!

错误:

java.io.IOException: HTTPS hostname wrong:  should be <xxx.xxx.xxx.xxx>

与某些浏览器不同,Oracle的主机名验证器Java实现在使用IP地址(而不是主机名)时严格遵循(HTTPS规范)。特别是,在Subject Alternative Name extension中必须有一个IP条目

更多详情请参阅


请注意,从注释链接的代码只会禁用任何证书验证,这将使它有可能受到中间人攻击:不要使用它

您是否已将服务器的证书安装到cacerts文件中?可能是您的https连接使用了某个端口?这可能有助于我添加了一个证书,它是443。问题是,如果将此代码用于带有域名的地址,它就有效了。@Umer Hayat:它有效。非常感谢。
public static void main(String args[]){

        StringBuffer param = new StringBuffer();
        param.append("https://xxx.xxx.xxx.xxx/insert.php");
        param.append("?a=a");
        param.append("&b=c");
        param.append("&c=c");   
        System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

        try{
            URL url =new URL(param.toString());
            URLConnection con = url.openConnection();
            con.setAllowUserInteraction(true);
            con.getInputStream();
            BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuffer result = new StringBuffer();

            while ((inputLine = in.readLine()) != null){
                result.append(inputLine);
                            }
            in.close();

            System.out.println("Result=" + result.toString());
        }catch(Exception ee){
            System.out.print(ee);
        }

}