我想从java调用https url并且它不受信任,并且它没有域名但是ip(公共或私有)。 当我调用具有不受信任证书的域名的URL时,它可以工作。 但是对于IP地址,它不起作用。这是我得到的错误和源代码。 你能告诉我是什么问题以及解决这个问题的方法。
谢谢!
错误:
java.io.IOException: HTTPS hostname wrong: should be <xxx.xxx.xxx.xxx>
来源:
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);
}
}
答案 0 :(得分:1)
与某些浏览器不同,Oracle的主机名验证程序的Java实现严格遵循RFC 2818(HTTPS规范),当使用IP地址时(与主机名相对)。特别是,主题备用名称扩展名中必须有一个IP条目。
this answer中的更多详情。
请注意,从评论链接的代码只是禁用任何证书验证,这将使其可能对中间人攻击开放:不要使用它!