繁体   English   中英

使用AsyncHttpClient的自定义SSL证书

[英]Custom SSL Certificates with 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版用于async-http-client。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM