Я пытаюсь установить взаимное соединение TLS с конечной точкой, к которой мы подключаемся, используя симулированный клиент с apache httpclient.
Я попытался выполнить эту конфигурацию, которая не работает, она просто заканчивается *Сообщение 1003 * и, насколько я могу судить, просто не использует мое хранилище ключей во время запроса. Мой анализ состоит в том, что это потому, что .setSSLSocketFactory(getSSLConnectionSocketFactory())
и .setConnectionManager(connectionManager)
не очень хорошо играют вместе в этой конфигурации:
@Primary
public Client feignClient(
CachingSpringLoadBalancerFactory cachingFactory, SpringClientFactory clientFactory,
BeanFactory beanFactory,
@Qualifier("customApacheHttpClient") ApacheHttpClient apacheHttpClient) {
return new TraceLoadBalancerFeignClient(apacheHttpClient, cachingFactory, clientFactory, beanFactory);
}
/**
* @param connectionManager is autowired from HttpClientFeignLoadBalancedConfiguration.HttpClientFeignConfiguration
*/
@Bean(name = "customApacheHttpClient")
public ApacheHttpClient apacheHttpClient(
HttpClientConnectionManager connectionManager,
FeignHttpClientProperties httpClientProperties) {
RequestConfig defaultRequestConfig = RequestConfig.custom()
.setConnectTimeout(httpClientProperties.getConnectionTimeout())
.setRedirectsEnabled(httpClientProperties.isFollowRedirects())
.build();
return new ApacheHttpClient(
HttpClients.custom()
.setConnectionManager(connectionManager)
.setDefaultRequestConfig(defaultRequestConfig)
.setSSLSocketFactory(getSSLConnectionSocketFactory())
.build());
}
В качестве решения я удалил setSSLSocketFactory
и вместо этого добавил компонент RegistryBuilderОднако, похоже, он не подобран. Как я могу получить этот bean-компонент:
@Bean
public RegistryBuilder registryBuilder(SSLConnectionSocketFactory sslConnectionSocketFactory) {
return RegistryBuilder.create()
.register("http", PlainConnectionSocketFactory.INSTANCE)
.register("https2", sslConnectionSocketFactory)
.register("https", sslConnectionSocketFactory);
}
Впрыскивается сюда:
package org.springframework.cloud.openfeign.ribbon;
import ...
class HttpClientFeignLoadBalancedConfiguration {
...
protected static class HttpClientFeignConfiguration {
...
@Autowired(required = false)
private RegistryBuilder registryBuilder;
...
Любые указатели приветствуются, или любой проект GitHub, который устанавливает TLSv1.2 с сертификатами на стороне клиента, симулируети ApacheHttpClient был бы очень полезен.