如何使用Play WS with SSL?

use*_*850 5 java rest playframework-2.3

我的Java客户端应用程序需要执行REST调用.我被指示使用Play的WS实现.目前,我有这个:

AsyncHttpClientConfig.Builder builder = new com.ning.http.client.AsyncHttpClientConfig.Builder();
NingWSClient wsc = new play.libs.ws.ning.NingWSClient(builder.build());
WSRequestHolder holder = wsc.url("http://www.simpleweb.org/");
Run Code Online (Sandbox Code Playgroud)

这有效.但是,我的应用程序需要访问使用SSL的安全Web服务.我的客户端有一个PKCS12证书.如何让WS使用此证书建立安全连接?

需要说明的是,这不是Play应用程序.

小智 2

直接使用 WS 是不可能的。Play 文档说:“WS 不支持客户端证书(又名相互 TLS / MTLS / 客户端身份验证)。您应该直接在AsyncHttpClientConfig的实例中设置 SSLContext并设置适当的 KeyStore 和 TrustStore。”

你也许可以做这样的事情:

KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory
        .getDefaultAlgorithm());
KeyStore keyStore = KeyStore.getInstance("pkcs12");
InputStream inputStream = new FileInputStream("YOUR.p12");

keyStore.load(inputStream, "Your password as char[]");
keyManagerFactory.init(keyStore, "Your password as char[]");

SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(keyManagerFactory.getKeyManagers(), null,new SecureRandom());
AsyncHttpClientConfig httpClientConfig = new AsyncHttpClientConfig.Builder().setSSLContext(sslContext).build();
AsyncHttpClient httpClient = new AsyncHttpClient(httpClientConfig);
Run Code Online (Sandbox Code Playgroud)