Как заставить работать Conscrypt SSL Provider с HttpClient 5 в веб-приложении Tomcat
Я использую Apache HttpClient 5 вместе с Conscrypt для одновременного выполнения запросов HTTP 2.0 через SSL, как показано ниже:
final SSLContext sslContext;
try {
sslContext = SSLContexts.custom()
.setProvider(Conscrypt.newProvider())
.build();
} catch (Exception e) {
// ... omitted for brevity
}
final PoolingAsyncClientConnectionManager cm = PoolingAsyncClientConnectionManagerBuilder.create()
.setTlsStrategy(new ConscriptClientTlsStrategy(sslContext))
.build();
final CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
.setVersionPolicy(HttpVersionPolicy.NEGOTIATE)
.setConnectionManager(cm)
.build();
try {
httpclient.start();
HttpHost host = new HttpHost("www.wikidata.org");
final HttpClientContext clientContext = HttpClientContext.create();
final SimpleHttpRequest request = SimpleHttpRequests.GET.create(host, "/w/api.php?action=wbsearchentities&search=Washington");
request.addHeader("Accept-Charset", charset);
FutureCallback<SimpleHttpResponse> callback = // ... omitted for brevity
httpclient.execute(SimpleRequestProducer.create(request),
SimpleResponseConsumer.create(),
clientContext,
callback);
}
catch (Exception e) {
// ... omitted for brevity
}
Выполнение кода в модульном тесте прошло успешно. Однако, если он запускается как часть веб-приложения, работающего в Tomcat v8, он вызывает следующее исключение при вызове. Conscrypt.newProvider()
: message: java.lang.UnsatisfiedLinkError: Failed creating temp file (null)
, Это похоже на проблему привилегий. Кто-то может указать, что в этом контексте я должен настроить, чтобы решить проблему?
1 ответ
Вам нужно установить concerypt-openjdk-uber-1.4.2.jar в classpath, а не concerypt-openjdk-1.4.2.jar, надеюсь, это решит вашу проблему, так как uber jar будет иметь все зависимости, необходимые для concerypt.
Также используйте Http2AsyncClientBuilder вместо HttpAsyncClients для создания http2-мультиплексирования.