Невозможно настроить контекст SSL для клиента Open Feign. Получение ошибки PKIXJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Невозможно настроить контекст SSL для клиента Open Feign. Получение ошибки PKIX

Сообщение Anonymous »

Я хочу установить взаимное соединение TLS (mTLS) между двумя моими приложениями Spring Boot: внутренней службой и веб-службой. По этой причине я создал хранилища ключей, сертификатов и доверенных сертификатов.
Вот мои команды.
keytool -genkeypair -alias backend-service -keyalg RSA -keysize 2048 -validity 3650 -keystore backend-keystore.jks -storepass changeit -keypass changeit -ext SAN=dns:localhost,ip:127.0.0.1 -dname "CN=backend, OU=TK, O=AYE, L=Dhaka, C=BD"
keytool -genkeypair -alias web-service -keyalg RSA -keysize 2048 -validity 3650 -keystore web-keystore.jks -storepass changeit -keypass changeit -ext SAN=dns:localhost,ip:127.0.0.1 -dname "CN=web, OU=TK, O=AYE, L=Dhaka, C=BD"
keytool -exportcert -alias backend-service -keystore backend-keystore.jks -file backend-service.cer -storepass changeit
keytool -exportcert -alias web-service -keystore web-keystore.jks -file web-service.cer -storepass changeit
keytool -import -alias web-service -file "D:\projects\springProjects\AyeTKVehicleManagement\web-service\src\main\resources\web-service.cer" -keystore backend-truststore.jks -storepass changeit -noprompt
keytool -import -alias backend-service -file "D:\projects\springProjects\AyeTKVehicleManagement\backend-service\src\main\resources\backend-service.cer" -keystore web-truststore.jks -storepass changeit -noprompt

Файл свойств серверного приложения.
server.port=8443
server.servlet.context-path=/aye-backend-service
server.ssl.enabled=true
server.ssl.key-store-type=PKCS12
server.ssl.key-store=classpath:backend-keystore.jks
server.ssl.key-store-password=changeit
server.ssl.key-alias=backend-service
server.ssl.key-password=changeit
server.ssl.trust-store=classpath:backend-truststore.jks
server.ssl.trust-store-password=changeit
server.ssl.trust-store-type=PKCS12
server.ssl.client-auth=need

Файл свойств веб-приложения.
server.servlet.context-path=/aye-web-service
server.port=8081
server.ssl.enabled=true
server.ssl.protocol=TLS
server.ssl.key-store-type=PKCS12
server.ssl.key-store=classpath:web-keystore.jks
server.ssl.key-store-password=changeit
server.ssl.key-alias=web-service
server.ssl.key-password=changeit
server.ssl.trust-store=classpath:web-truststore.jks
server.ssl.trust-store-password=changeit
server.ssl.trust-store-type=PKCS12
spring.cloud.openfeign.http2client.enabled=true

Конфигурация SSL для открытой симуляции
@Configuration
public class ApacheHttp5FeignSslClientConfig {

@Bean
public Feign.Builder feignBuilder(
@Value("${server.ssl.protocol}") String protocol,
@Value("${server.ssl.key-store-type}") String keyStoreType,
@Value("${server.ssl.key-store}") String keyStore,
@Value("${server.ssl.key-store-password}") String keyStorePassword,
@Value("${server.ssl.key-password}") String keyPassword,
@Value("${server.ssl.trust-store}") String trustStore,
@Value("${server.ssl.trust-store-password}") String trustStorePassword

) {
SSLContext sslContext = getSSLContext(protocol, keyStoreType, keyStore, keyStorePassword, keyPassword, trustStore, trustStorePassword);
SSLConnectionSocketFactory sslConnectionSocketFactory = SSLConnectionSocketFactoryBuilder.create().setSslContext(sslContext).build();
HttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create().setSSLSocketFactory(sslConnectionSocketFactory).build();
return Feign.builder()
.retryer(Retryer.NEVER_RETRY)
.client(new ApacheHttp5Client(HttpClients.custom()
.setConnectionManager(connectionManager)
.build()));
}

private SSLContext getSSLContext(String protocol, String keyStoreType,
String keyStore, String keyStorePassword, String keyPassword,
String trustStore, String trustStorePassword) {
try {
// Load key store
KeyStore keyStoreObj = KeyStore.getInstance(keyStoreType);
try (FileInputStream keyStoreStream = new FileInputStream(ResourceUtils.getFile(keyStore))) {
keyStoreObj.load(keyStoreStream, keyStorePassword.toCharArray());
}

// Load trust store
KeyStore trustStoreObj = KeyStore.getInstance(keyStoreType);
try (FileInputStream trustStoreStream = new FileInputStream(ResourceUtils.getFile(trustStore))) {
trustStoreObj.load(trustStoreStream, trustStorePassword.toCharArray());
}

// Create key manager factory
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(
KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStoreObj, keyPassword.toCharArray());

// Create trust manager factory
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(trustStoreObj);

// Create SSL context
SSLContext sslContext = SSLContext.getInstance(protocol);
sslContext.init(keyManagerFactory.getKeyManagers(),
trustManagerFactory.getTrustManagers(), new SecureRandom());

return sslContext;

} catch (Exception e) {
log.error("Error while building SSLContext for ApacheHttp5FeignSslClient", e);
throw new RuntimeException("Error while building SSLContext", e);
}
}

}

Притвориться клиентом
@FeignClient(name = "StepServiceFeignClient",
url = "${backend.service.url}${backend.service.steps.prefix}",
configuration = ApacheHttp5FeignSslClientConfig.class)
public interface StepServiceFeignClient {}

При попытке вызвать API-интерфейс бэкенда из веб-службы с использованием открытого симулируемого клиента выдается ошибка, я не могу понять причину сбоя.
выдало исключение
[Request processing failed: feign.RetryableException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target executing GET https://localhost:8443/aye-backend-serv ... =20&page=0] with root cause
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target


Подробнее здесь: https://stackoverflow.com/questions/798 ... pkix-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»