AWS Java SDK - отправка запроса SAML в STS - Невозможно найти действительный путь сертификации для запрошенной цели - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь отправить запрос 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, где я могу получить его? Есть ли другой способ обойти эту проблему?

Любая помощь будет признательна, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...