Я хочу установить взаимное соединение 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
Невозможно настроить контекст SSL для клиента Open Feign. Получение ошибки PKIX ⇐ JAVA
Программисты JAVA общаются здесь
1764703143
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
[b]Файл свойств серверного приложения.[/b]
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
[b]Файл свойств веб-приложения.[/b]
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
[b]Конфигурация SSL для открытой симуляции[/b]
@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);
}
}
}
[b]Притвориться клиентом[/b]
@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-service/api/steps?size=20&page=0] with root cause
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Подробнее здесь: [url]https://stackoverflow.com/questions/79835509/unable-to-configure-ssl-context-for-open-feign-client-getting-pkix-error[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия