Java Unirest禁用证书

时间:2018-02-02 10:05:56

标签: java spring spring-boot unirest

请告诉我禁用证书验证的方法,将Unirest用作其他客户端。

我使用Unirest和Java Spring。以下是我的源代码:

try {
    HttpResponse<String> response = Unirest.post("myurl")
      .header("content-type", "application/json")
      .header("accept", "application/json")
      .body("my json data here")
      .asJson();
} catch (Exception e) {
    logger.info("==================REST CLIENT ERROR: "+e.getMessage());
}

结果:

  

================== REST客户端错误:javax.net.ssl.SSLHandshakeException:   sun.security.validator.ValidatorException:PKIX路径构建失败:   sun.security.provider.certpath.SunCertPathBuilderException:无法   找到所请求目标的有效证书路径

2 个答案:

答案 0 :(得分:2)

我知道这个线程很旧,但是只是在编写以防别人正在寻找更简单的方法。

Unirest现在已对此提供内置支持。

Unirest.config().verifySsl(false);

这对我有用。

答案 1 :(得分:0)

在触发您的http发布请求之前,将一个自定义的http客户端设置为Unirest,如下所示:

try {
        SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy() {
            public boolean isTrusted(X509Certificate[] chain, String authType) {
                return true;
            }
        }).build();
        HttpClient customHttpClient = HttpClients.custom().setSSLContext(sslContext)
                .setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
        Unirest.setHttpClient(customHttpClient);
        HttpResponse<JsonNode> response = Unirest.post("myurl")
                .header("content-type", "application/json")
                .header("accept", "application/json")
                .body("my json data here")
                .asJson();
    } catch (Exception e) {
        logger.info("==================REST CLIENT ERROR: " + e.getMessage());
    }

顺便说一句,请注意asJson方法返回的是JsonNode类型,而不是String。