java - 向服务器ip地址发送https请求会抛出SSLHandshakeException

时间:2016-10-21 15:54:18

标签: java https

我需要通过HTTPS协议向服务器ip发送post请求。这是我的代码:

HttpClient httpClient = HttpClients.createDefault();
String address = "https://100.100.100.100:90"; //just an example
HttpPost httpPost = new HttpPost(address);
httpPost.addHeader("charset", "UTF-8");

//set post data(not important here)
...

HttpResponse response = httpClient.execute(httpPost);

最后一行抛出此异常:

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

问题是什么?如何解决?

修改

我不知道DNS名称,所以我需要使用ip代替。我在浏览器中向该ip发送了ajax请求,浏览器发送请求,但请求仍处于等待模式。我的Http Client是一个简单的Java桌面应用程序。

1 个答案:

答案 0 :(得分:0)

您尝试连接的服务器可能不接受使用IP地址的请求。

在HTTP中,如果服务器用于多个域/网站,则会发生这种情况 - 它需要知道哪一个提供给您,并且它基于Host标头执行此操作。因此,如果您想通过IP连接,您的客户端必须配置为发送正确的Host(并且必须能够这样做)。

现在,在HTTPS协议中,服务器还在握手期间提供服务器证书,并为服务器主机名发出此证书,可能是DNS名称,例如example.com) - 再次,如果您通过IP连接并且不再向您的HTTP客户端提供任何信息,则客户端无法验证从服务器收到的证书是否为正确的主机名发出。

相关问题