SSLException:证书中的主机名不匹配:< 50.19.233.255> !=< * .heroku.com>

时间:2015-12-28 12:50:54

标签: java ssl ssl-certificate apache-httpclient-4.x

我正在尝试从java调用heroku的开发人员api,但是我得到以下异常:

    Exception in thread "main" javax.net.ssl.SSLException: hostname in certificate didn't match: <50.19.233.255> != <*.heroku.com>

我的代码如下所示:

    HttpClient client = new DefaultHttpClient();
    HttpGet request = new HttpGet("https://api.heroku.com/apps");
    String token = "d6d7ea6e-6e71-4f13-b0ff-ed9ee9d56c37";
    request.addHeader("Authorization", "Bearer "+token);
    HttpResponse response = client.execute(request);

如果我使用 curl 尝试它,它可以正常工作:

    curl "https://api.heroku.com/apps" -H"Authorization: Bearer d6d7ea6e-6e71-4f13-b0ff-ed9ee9d56c37"

为什么java代码对curl的行为不同?

P.S。我知道其他人已经问了这个问题,但所有答案都是,例如:

https://stackoverflow.com/a/7266768

https://stackoverflow.com/a/3904473

https://stackoverflow.com/a/25356821

建议我应该覆盖证书主机名检查,这肯定会破坏这一点(当然不是生产就绪)?

1 个答案:

答案 0 :(得分:2)

Apache HttpClient resolving domain to IP address and not matching certificate中描述了此问题。 它似乎是您正在使用的HTTPClient版本中的一个错误,它将目标IP而不是目标主机名与主题证书进行比较。请改用HTTPClient的固定版本。