场景:kettle调用https接口,跳过校验SSL。(有些公司内部系统之间的https的接口是没有SSL校验这一说,无需使用用证书的)
解决方案:自定义插件或者自定义jar包通过javascript调用https接口。
1、http post 步骤调用https接口,无法通过ssl安全校验,如下图所示:
查看了kettle源码之后该步骤底层调用的是HTTPPOST类中的callHTTPPOST方法,但是该方法并未处理https调用情况,如下图所示:
2、 使用REST client步骤调用https接口,依然提示无法通过ssl安全校验,如下图所示:
查看了kettle源码之后该步骤底层调用的是Rest类中的callReset方法,最新的源码中已经加入了参数ignoreSSL,但是该参数并未暴露配置接口,也许后续的版本后解决这个问题,如下图所示:
3、自定义jar包方式调用https接口,总体流程设计如下图所示:
1)将自定义jar放到lib目录下。
2)javascript脚本步骤调用自定义jar方式进而调用https接口,如下图所示:
3)关键javascript代码如下:
var httpUtil = Packages.com.xiaojingang.xiaojingang_https.HttpUtil(); //这里注意参数body如果是json字符串的话,这里自动转换为对象了, //索引这里要重新转换为字符串 var bodyStr= body+''; var result = httpUtil.doRequest(url,bodyStr,method,10000,true);
4)jar包中的忽略SSL校验的关键代码如下:
private static SSLContext getIgnoreVerifySSL() { try { SSLContext sslContext = SSLContexts.custom() .loadTrustMaterial(new TrustStrategy() { @Override public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { return true; } }) .build(); return sslContext; } catch (Exception e) { log.error(e.getMessage(),e); return null; } }