Недавно я добавил файл хранилища доверенных сертификатов, src/main/resources/rds-truststore.jks
, в свое приложение Grails 6 для подключения к базе данных AWS с использованием SSL. Чтобы это работало при развертывании приложения в среде AWS Elastic Beanstalk Tomcat, я установил свойство javax.net.ssl.trustStore
в classpath:rds-truststore.jks
.
Но теперь я получаю ошибку при запуске следующего метода службы Grails (который выполняет вызов API к конечной точке HTTPS):
Я получаю следующую ошибку:
Я предполагаю, что до того, как в моем приложении появился файл хранилища доверия, RestBuilder
все еще выполнял проверку SSL и выдал бы ошибку, если бы сертификат сервера, к которому я выполняю вызов HTTPS API, был недействительным.
Можно ли заставить мой метод службы Grails выполнять тот же тип проверки SSL, который он использовал раньше, и просто игнорировать мой файл хранилища ключей Java? Или мне нужно добавить сертификат (всех серверов, к которым я делаю HTTPS-вызовы) в мое хранилище ключей Java в качестве доверенного сертификата?
Доверие всем сертификатам, как описано в этом ответе StackOverflow, не кажется хорошим решением:
Это сделало бы мое приложение Grails менее безопасным, чем оно было до того, как у меня появился файл хранилища доверенных сертификатов, src/main/resources/rds-truststore.jks
, верно?
Для дополнительного контекста: мое приложение Grails 6.2.0 использует библиотеку org.grails:grails-datastore-rest-client:6.1.12.RELEASE
.
static RestResponse getUserInfo(String userinfoEndpoint, String accessToken) {
RestBuilder rest = new grails.plugins.rest.client.RestBuilder()
String authToken = "Bearer ${accessToken}"
RestResponse restResponse = rest.post(userinfoEndpoint) {
auth(authToken)
accept("application/json")
}
return restResponse
}
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://rollcall-dotnet-api.hcl-testcloud.com/WeatherForecast": PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:791)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:738)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:618)