Какова наилучшая практика работы с sun.security.provider.certpath.SunCertPathBuilderException в приложении Grails?

1
8

Недавно я добавил файл хранилища доверенных сертификатов, 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)
Лучезар
Вопрос задан17 сентября 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.