Вот мои команды.
Код: Выделить всё
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
Код: Выделить всё
@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 {}
выбросило исключение [Ошибка обработки запроса: feign.RetryableException: не удалось построить путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации к запрошенной цели, выполняя GET https://localhost:8443/aye-backend-serv ... =20&page=0] с основной причиной
sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации к запрошенной цели
Подробнее здесь: https://stackoverflow.com/questions/798 ... pkix-error
Мобильная версия