使用AsyncHttpClient

时间:2019-07-18 14:22:52

标签: java ssl ssl-certificate asynchttpclient

Java应用程序需要使用自定义证书向服务器发出一些请求。操作系统包含给定服务器的另一个证书,无论是否添加自定义证书文件,它都没有区别。

流程类似于

AsyncHttpClientConfig asyncHttpClientConfig = new DefaultAsyncHttpClientConfig
    .Builder()
    .setMaxRequestRetry(1)
    .setMaxConnections(1)
    .setMaxConnectionsPerHost(1)
    .setRequestTimeout(10000)
    .setConnectTimeout(10000)
    .setFollowRedirect(true)
    .setSslContext(buildSslContext())
    .build();

AsyncHttpClient asyncHttpClient = new DefaultAsyncHttpClient(asyncHttpClientConfig);

String url = "www.example.com"
ListenableFuture<Response> res = asyncHttpClient.prepareGet(url).execute();
Response r = res.get();
System.out.println(r);

buildSslContext方法是

private static SslContext buildSslContext() {
    File pemFile = new File("/path/to/cert.pem");

    try {
        return SslContextBuilder.forClient().keyManager(pemFile, pemFile).build();
    } catch (SSLException e) {
        e.printStackTrace();
        return null;
    }
}

我还测试了curl

# curl -v www.example.com
# curl -v --cacert /path/to/cert.pem www.example.com

没有区别。但是,如果我确实删除了/etc/ssl/的内容,它将根本无法访问服务器。

是否有可能通过async-http-client为给定服务器指定自定义证书,并将OS的默认证书用于其他服务器?我将2.8.0版用于异步HTTP客户端。

0 个答案:

没有答案