我的 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/");
这行得通。但是,我的应用程序需要访问使用 SSL 的安全 Web 服务。我的客户有 PKCS12 证书。如何让 WS 使用此证书建立安全连接?
需要说明的是,这不是 Play 应用程序。
最佳答案
直接用 WS 是不可能的。 Play docs says :“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);
关于java - 如何使用带 SSL 的 Play WS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27726968/