连接到java中的https服务 - 主机名中有“_”?

时间:2012-10-02 11:45:46

标签: java android wcf azure

我想通过https(具有传输安全性的webHttpBinding)连接到windows azure上托管的wcf json服务。地址是some_subdomain.somesite.com,当然会重定向到someapp.cloudapp.net 由于主机名中的“_”,我无法使用“some_subdomain.somesite.com”。

原始代码

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(serviceUrl + "/" + serviceMethod);
post.setHeader("Accept", "application/json");
post.setHeader("Content-type", "application/json");
String jsonParameters = gson.toJson(parameters);
post.setEntity(new StringEntity(jsonParameters));
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity(); // throws here
return convertStreamToString(entity);

throws java.lang.IllegalArgumentException:主机名可能不为null;

这个类似的代码:

        InputStream inputStream;            
        URL url = new URL(serviceUrl + "/" + serviceMethod);
        HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
        httpConn.setRequestMethod("GET");
        httpConn.connect(); // throws exception here
        if(httpConn.getResponseCode() == HttpURLConnection.HTTP_OK)
        {
            inputStream = httpConn.getInputStream();
            ...
        }

抛出NullPointerException。

如果我只是输入IP,那么我得到

javax.net.ssl.SSLException:证书中的主机名不匹配:IP_ADDRESS!= some_subdomain.somesite.com

我正在使用生产证书,因此更改域名并获取其他证书可能不是一种选择。 请注意,在iOS和WinRT版本上一切正常,只有java似乎与主机名有问题。

那我怎么能: a)在主机名OR中使用带“_”的URL b)配置服务器的预期身份?

1 个答案:

答案 0 :(得分:2)

您不能在主机名中加上下划线,请参阅herehere