请问为什么HttpsURLConnection无法访问IP地址的URL

aoj007aoj 2010-01-14 09:41:05
您好,我想通过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,先谢谢各位大哥了,谢谢!
...全文
489 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
androidota1 2011-05-18
  • 打赏
  • 举报
回复
的确很nb呀
mooxin 2010-03-29
  • 打赏
  • 举报
回复
楼主最后是怎么解决的?我也遇到此问题了,痛苦!
aoj007aoj 2010-01-14
  • 打赏
  • 举报
回复
谢谢各位
owen_008 2010-01-14
  • 打赏
  • 举报
回复
非常好~~~~~~~~~~~~~~~~~~~~~~~~~~我顶
aoj007aoj 2010-01-14
  • 打赏
  • 举报
回复
您好,输出结果为:Warning: URL Host: 192.168.0.100 vs. 192.168.0.100,是一样的
同时可以通过路径校验,您还有别的方法吗,您的意思是只能绕路是吗?谢谢


[Quote=引用 6 楼 ghchen 的回复:]
楼主有没有下面的代码

// 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);



[/Quote]
aoj007aoj 2010-01-14
  • 打赏
  • 举报
回复
java.net.UnknownHostException: <192.168.0.36>





[Quote=引用 3 楼 zhoupuyue 的回复:]
java.io.IOException: HTTPS hostname wrong:  should be <192.168.0.100>
-----------------------------------------------------------------------
把IP地址放到 <>中试试
[/Quote]
ghchen 2010-01-14
  • 打赏
  • 举报
回复
楼主有没有下面的代码

// 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);



拼搏 2010-01-14
  • 打赏
  • 举报
回复
如果要启用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就直接抛出了上面那个错误。
aoj007aoj 2010-01-14
  • 打赏
  • 举报
回复
您好,我这张证书就是CA签发的证书,所以应该不会是非标准的证书,谢谢。
阿_布 2010-01-14
  • 打赏
  • 举报
回复
java.io.IOException: HTTPS hostname wrong: should be <192.168.0.100>
-----------------------------------------------------------------------
把IP地址放到<>中试试
waterdr 2010-01-14
  • 打赏
  • 举报
回复
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;
}
}


}

如果你为服务器证书经常改变,而自己的客户端方也跟随改变而头痛的话,以上方法也适合。
Z_FEI 2010-01-14
  • 打赏
  • 举报
回复
不会,学习下!

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧