You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS SDK for Java V1扮演角色失败,遇SSL连接重置错误求助

AWS SDK for Java V1 扮演角色时出现 SSLException: Connection reset 的修复思路

问题描述

我正尝试通过扮演AWS角色来连接不同服务,使用AWS SDK for Java V1编写了如下实现代码,但运行出现异常,抛出错误:

javax.net.ssl.SSLException: Connection reset

实现代码

public static Credentials assumeRole() {
    String targetRoleArn = "xxx";
    String assumedRoleName = "xxx";

    String accessKey = "xxx";
    String secretKey = "xxx";
    
    Credentials assumedCredentials = null;      

    AwsBasicCredentials credentials = AwsBasicCredentials.create(accessKey, secretKey);

    StsClient stsClient = StsClient.builder()
            .region(Region.US_EAST_1)
            .credentialsProvider(StaticCredentialsProvider.create(credentials))
            .build();

    try {
        AssumeRoleRequest roleRequest = AssumeRoleRequest.builder()
                .roleArn(targetRoleArn)
                .roleSessionName(assumedRoleName)
                .build();

        AssumeRoleResponse roleResponse = stsClient.assumeRole(roleRequest);

        assumedCredentials = roleResponse.credentials();

    } catch (StsException e) {
        System.err.println(e.getMessage());
        System.exit(1);
    }
    
    return assumedCredentials;
    
}

修复思路

  • 检查网络与代理配置
    如果你的环境处于代理网络下,必须为StsClient配置代理信息,示例代码如下:

    StsClient stsClient = StsClient.builder()
            .region(Region.US_EAST_1)
            .credentialsProvider(StaticCredentialsProvider.create(credentials))
            .clientConfiguration(ClientConfiguration.builder()
                    .proxyHost("你的代理地址")
                    .proxyPort(你的代理端口)
                    .build())
            .build();
    

    同时手动测试网络连通性,比如用curl访问sts.us-east-1.amazonaws.com,确认能正常建立SSL连接。

  • 验证SSL证书与JDK版本
    老旧JDK的信任库可能缺少AWS的根证书,建议升级到Java 11或17这类LTS版本。如果无法升级,可以手动将AWS的SSL证书导入到JDK的cacerts信任库中。

  • 核对区域配置一致性
    确认目标IAM角色所在区域和StsClient配置的Region.US_EAST_1完全一致,如果角色在其他区域(比如中国区CN_NORTH_1),需要同步修改客户端的区域配置。

  • 添加超时与重试策略
    连接重置可能是临时网络波动导致,给客户端增加超时和重试配置,提升容错性:

    StsClient stsClient = StsClient.builder()
            .region(Region.US_EAST_1)
            .credentialsProvider(StaticCredentialsProvider.create(credentials))
            .clientConfiguration(ClientConfiguration.builder()
                    .connectionTimeout(5000) // 5秒连接超时
                    .socketTimeout(10000)   // 10秒读取超时
                    .retryPolicy(RetryPolicy.defaultRetryPolicy())
                    .build())
            .build();
    
  • 排查IAM权限与信任关系
    虽然报错是SSL层面的问题,但如果原IAM用户没有sts:AssumeRole权限,或者目标角色的信任策略不允许当前账号扮演,也可能在握手阶段触发异常。检查原用户的权限策略、目标角色的信任关系是否配置正确。

内容的提问来源于stack exchange,提问作者user2324686

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:43:15