4

我有一个来自 REST 服务提供商的证书,我需要告诉给定的 HTTP get 调用以在联系给定的提供商时使用它。我正在处理的代码库曾经使用第三方库来实现这一点,但我想利用 WS.url 调用的超时特性和细节。

我查看了 API 文档和网站上的文档,我只发现了一些线索,而这些线索到目前为止还没有让我找到任何解决方案。

4

1 回答 1

1

您应该能够通过调整 AsyncHttpClient 的 SSLContext 来处理它。这个想法是为底层客户端提供客户端证书。我假设你有一个 pkcs12 飞来飞去。

似乎 AsyncHttpClientConfig 无法更新,因为它是自动初始化的。因此,应该实例化和使用新的客户端。

以下内容应按照包含 pkcs12 文件的 SSLContext 的说明发送请求。

    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory
            .getDefaultAlgorithm());
    KeyStore clientCert = KeyStore.getInstance("pkcs12");
    InputStream is = new FileInputStream("/conf/brazo.p12");

    clientCert.load(is, "brazo".toCharArray());
    kmf.init(clientCert, "brazo".toCharArray());

    SSLContext sc = SSLContext.getInstance("TLSv1");
    sc.init(kmf.getKeyManagers(), null,
            new SecureRandom());
    AsyncHttpClientConfig config = new AsyncHttpClientConfig.Builder().setSSLContext(sc).build();
    AsyncHttpClient client = new AsyncHttpClient(config);

    String url = "https://your-url";
    Request req = new RequestBuilder().setUrl(url).setMethod("GET").build();
    client.executeRequest(req);

可悲的是,这远离了 Play!标准 WS 库。

于 2013-09-30T20:23:17.750 回答