Play Framework:如何使用给定的证书进行HTTP WS.url调用?

时间:2013-06-12 16:55:59

标签: scala rest ssl playframework playframework-2.0

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

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

1 个答案:

答案 0 :(得分: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库。