在JEST弹性搜索REST JAVA API中与SSL证书合并的问题



我在使用JEST API连接到Elasticsearch(Elk)面临问题。我正在寻找基于休息的Java API来支持Scroll&扫描以及基于证书的身份验证。

我发现开玩笑和Flummi是一个可用的。

由于开玩笑很受欢迎并且有更多的支持,所以我正在尝试使用它。

我的麋鹿DB需要一个我已经在个人证书中安装的身份验证证书。

我的问题是如何使用Jest Client与证书执行HTTP请求?我找到了一些代码,但是它可以帮助我。我的代码在下面。

    package pkg;
      import io.searchbox.core.*;
      import com.google.gson.JsonArray;
      import org.elasticsearch.index.query.QueryBuilders;
      import org.elasticsearch.search.builder.SearchSourceBuilder;
      import org.apache.http.conn.ssl.NoopHostnameVerifier;
      import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
      import org.apache.http.ssl.SSLContextBuilder;
      import org.apache.http.ssl.TrustStrategy;
      import org.apache.http.nio.conn.SchemeIOSessionStrategy;
      import org.apache.http.nio.conn.ssl.SSLIOSessionStrategy;
      import java.security.KeyManagementException;
      import java.security.KeyStore;
      import java.security.KeyStoreException;
      import java.security.NoSuchAlgorithmException;
      import java.security.NoSuchProviderException;
      import java.security.cert.CertificateException;
      import javax.net.ssl.HostnameVerifier;
      import javax.net.ssl.SSLContext;
      import java.io.IOException;
      import io.searchbox.client.JestClient;
      import io.searchbox.client.JestClientFactory;
      import io.searchbox.client.JestResult;
      import io.searchbox.client.config.HttpClientConfig;
      import io.searchbox.params.Parameters;

      public class ScrollELK {
        private static final String INDEX = "daivb-logs";
        private static final String TYPE = "cep";
        public void scroll() throws IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException, NoSuchProviderException {     
        //SSL certificate incorporation         
        SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() 
           {  @java.lang.Override
            public boolean isTrusted(java.security.cert.X509Certificate[] x509Certificates, java.lang.String s) throws CertificateException {
                               return false;}
             }).build();
       // skip hostname checks
            HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
            SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
            SchemeIOSessionStrategy httpsIOSessionStrategy = new SSLIOSessionStrategy(sslContext, hostnameVerifier);
             // Get Jest client
            HttpClientConfig clientConfig = new HttpClientConfig                    
                    .Builder("https://***.net/")        
                    .multiThreaded(true)
                    .connTimeout(2000) 
                    .defaultSchemeForDiscoveredNodes("https")                   
                    .sslSocketFactory(sslSocketFactory)
                    .httpsIOSessionStrategy(httpsIOSessionStrategy)
                    .build();
            JestClientFactory factory = new JestClientFactory();
            factory.setHttpClientConfig(clientConfig);
            JestClient client = factory.getObject();

            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.query(QueryBuilders.matchAllQuery());               
            Search search = new Search.Builder(searchSourceBuilder.toString())
                    .addIndex(INDEX)
                    .addType(TYPE)                
                    .setParameter(Parameters.SIZE, 100)
                    .setParameter(Parameters.SCROLL, "5m")
                    .setParameter(Parameters.SEARCH_TYPE, "scan")                   
                    .build();
            JestResult result = client.execute(search);
            JsonArray hits = result.getJsonObject().getAsJsonObject("hits").getAsJsonArray("hits");
            String scrollId = result.getJsonObject().get("_scroll_id").getAsString();
            int count =0;
           do
           {     SearchScroll scroll = new SearchScroll.Builder(scrollId, "5m")                     
                            .build();
                result = client.execute(scroll);       
                hits = result.getJsonObject().getAsJsonObject("hits").getAsJsonArray("hits");
                scrollId = result.getJsonObject().getAsJsonPrimitive("_scroll_id").getAsString();
                count =result.getJsonObject().getAsJsonObject("hits").getAsJsonArray("hits").size();                
                System.out.println(count); 
            }while(count>0);     

            // clear a single scroll id
            ClearScroll clearScroll = new ClearScroll.Builder().addScrollId(scrollId).build();
            result = client.execute(clearScroll);          
        }  
}

pls建议。

private SSLContext createSSLContext() {
        try {
            SSLContextBuilder sslBuilder = SSLContexts.custom().loadTrustMaterial(null, (x509Certificates, s) -> true);
            final SSLContext sslContext = sslBuilder.build();
            return sslContext;
        } catch (Exception e) {
            LOGGER.error("cannot create SSLContext", e);
        }
        return null;
}

最新更新