【问题标题】:Using Elasticsearch Java REST API with self signed certificates将 Elasticsearch Java REST API 与自签名证书一起使用
【发布时间】:2020-04-14 14:13:25
【问题描述】:

我想使用 Java REST API (RestHighLevelClient) 通过 HTTPS 与 Elasticsearch 5.6 服务器进行通信。但是,服务器的证书是自签名的,当我尝试连接时,它会引发 SSLHandshakeException。

有没有办法将 REST 客户端配置为接受自签名证书?

【问题讨论】:

    标签: java rest elasticsearch ssl-certificate


    【解决方案1】:

    我使用自定义的 Java 密钥库来完成这项工作。这是我的代码:

    CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
    
    final SSLContext sslContext = SSLContexts.custom()
            .loadTrustMaterial(new File("my_keystore.jks"), keystorePassword.toCharArray(),
                new TrustSelfSignedStrategy())
            .build();
    
    
    RestClient client = RestClient.builder(new HttpHost(host, port, scheme)).setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
            .setDefaultCredentialsProvider(credentialsProvider)
            .setSSLContext(sslContext)
    ).build();
    

    为了创建密钥库,我通过 Firefox 下载了域的证书,并使用了:

    keytool -import -v -trustcacerts -file my_domain.crt -keystore my_keystore.jks -keypass password -storepass password
    

    【讨论】:

    • 确实推荐使用您自己的密钥库。您也可以使用标准的 Java 运行时 cacerts 文件,然后不需要自定义 SSLContext,但每次运行时更新都会覆盖该文件。
    猜你喜欢
    • 1970-01-01
    • 2011-04-08
    • 2014-11-25
    • 2010-10-06
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    相关资源
    最近更新 更多