您好,我想通过HttpsURLConnection访问一个IP地址,出现错误:java.io.IOException: HTTPS hostname wrong:  should be <192.168.0.100>,但是访问域名的地址却不会有错,请问HttpsURLConnection是不是不能访问IP地址。
我已添加了IP地址服务器的的证书链,而且此证书链IP即为192.168.0.100,同时主题备用名称也为192.168.0.100,先谢谢各位大哥了,谢谢!

解决方案 »

  1.   

    java.io.IOException: HTTPS hostname wrong: should be <localhost>:     原因:当访问HTTPS的网址。您可能已经安装了服务器证书到您的JRE的keystore 。但这个错误是指服务器的名称与证书实际域名不相等。这通常发生在你使用的是非标准网上签发的证书。    解决方法:让JRE相信所有的证书和对系统的域名和证书域名。以下是一小段代码,可以用来实现这一目标。 public class Servlet_test {    public static void main(String[] args)throws Exception {
            URL url=new URL("https://localhost:8443/sso/servlet/SyncServlet?method=deleteOrg&appid=ec28d8fd22cf4bdf0122cf53e8a10002&orgcoding=001311&memo=");
            HttpsURLConnection conn=(HttpsURLConnection)url.openConnection();
            conn.setHostnameVerifier(new Servlet_test().new TrustAnyHostnameVerifier());
            conn.connect();
            InputStream ip= conn.getInputStream();
            BufferedReader br=new BufferedReader(new InputStreamReader(ip));
            String line;
            StringBuffer strb = new StringBuffer();
            while ((line = br.readLine()) != null) {
                strb.append(line);
            }
            String ss = strb.toString();
            System.out.println(ss);
        }    public class TrustAnyHostnameVerifier implements HostnameVerifier {
            public boolean verify(String hostname, SSLSession session) {
                // 直接返回true
                return true;
            }
        }    
    }如果你为服务器证书经常改变,而自己的客户端方也跟随改变而头痛的话,以上方法也适合。
      

  2.   

    java.io.IOException: HTTPS hostname wrong:  should be <192.168.0.100>
    -----------------------------------------------------------------------
    把IP地址放到<>中试试
      

  3.   

    如果要启用tomcat的https方式,首先要创建证书,使用的工具是jdk中的keytool ,用法不多说了,到处都有。 使用keytool创建证书的第一个问题是:您的姓名是什么(竟然是中文的!),这时候,理所应当的是回答自己的名字。配置完成后,用浏览器访问,一切正常。但使用http client 写程序访问的时候,问题就出来了。
    一般表现形式是这样的: 
    type Exception report
    message 
    description The server encountered an internal error () that prevented it from fulfilling this request.
    exception 
    javax.servlet.ServletException: HTTPS hostname wrong: should be <localhost>
     ......
    root cause 
    java.io.IOException: HTTPS hostname wrong: should be <localhost>
     ......看到这个问题就能猜到是证书问题。但无论如何也猜不到证书到底有什么毛病。事实上,令人难以置信的是错误就出在创建证书的第一个问题--你的姓名。其实这个“姓名”应该是域名。比如说localhost或是blog.devep.net之类的。输成了姓名,和真正运行的时候域名不符,当然会出错。浏览器无所谓,弹出一个对话框,用户按一下就行了。但http client就直接抛出了上面那个错误。
      

  4.   

    楼主有没有下面的代码// Now you are telling the JRE to ignore the hostname
                   HostnameVerifier hv = new HostnameVerifier()
        {
            public boolean verify(String urlHostName, SSLSession session)
            {
                System.out.println("Warning: URL Host: " + urlHostName + " vs. "
                        + session.getPeerHost());
                return true;
            }
        };
     HttpsURLConnection.setDefaultHostnameVerifier(hv);
      

  5.   

    java.net.UnknownHostException: <192.168.0.36>
      

  6.   

    您好,输出结果为:Warning: URL Host: 192.168.0.100 vs. 192.168.0.100,是一样的
    同时可以通过路径校验,您还有别的方法吗,您的意思是只能绕路是吗?谢谢