Я пытаюсь отправить запрос SAML на AWS STS, чтобы получить временные учетные данные, которые я могу использовать для аутентификации с другими AWS службами. Ниже мой код:
BasicAWSCredentials basicCreds=new BasicAWSCredentials("", "");
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(basicCreds)).withRegion(Regions.DEFAULT_REGION.getName()).build();
AssumeRoleWithSAMLRequest samlReq = new AssumeRoleWithSAMLRequest();
samlReq.setRoleArn(role_arn);
samlReq.setPrincipalArn(principal_arn);
samlReq.setSAMLAssertion(assertion);
AssumeRoleWithSAMLResult token = stsClient.assumeRoleWithSAML(samlReq);
Запрос должен go через прокси, и я уже настроил это в коде. Когда я запускаю его, я вижу следующую ошибку:
INFO: Configuring Proxy. Proxy Host: xxx.xxx.com Proxy Port: 9400
com.amazonaws.SdkClientException: Unable to execute HTTP request: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleRetryableException(AmazonHttpClient.java:1201)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1147)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:796)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:764)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:738)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:698)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:680)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:544)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:524)
at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.doInvoke(AWSSecurityTokenServiceClient.java:1719)
at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.invoke(AWSSecurityTokenServiceClient.java:1686)
at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.invoke(AWSSecurityTokenServiceClient.java:1675)
at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.executeAssumeRoleWithSAML(AWSSecurityTokenServiceClient.java:817)
at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.assumeRoleWithSAML(AWSSecurityTokenServiceClient.java:788)
at Hello.main(Hello.java:338)
Это происходит на линии AssumeRoleWithSAMLResult token = stsClient.assumeRoleWithSAML(samlReq);
. Я понимаю, что эта ошибка возникает, когда в файле cacerts отсутствует сертификат сервера. Я запускаю код с моего локального ноутбука, поэтому используется мой собственный файл cacerts.
Теперь мне интересно, нужно ли мне добавлять сертификат прокси-сервера или AWS сертификат? Если мне нужно добавить сертификат AWS, где я могу получить его? Есть ли другой способ обойти эту проблему?
Любая помощь будет признательна, спасибо.