【问题标题】:Issue configuring proxy settings with NTLM authentication on Amazon SDK在 Amazon SDK 上使用 NTLM 身份验证配置代理设置问题
【发布时间】:2013-12-22 12:55:23
【问题描述】:

我正在使用 amazon SDK 1.5.6 并尝试使用代理服务器初始化连接。 初始化成功,但是当我尝试使用 AmazonEC2Client 时它失败并显示以下内容 错误:

捕获的异常:状态代码:407,AWS 服务:AmazonEC2,AWS 请求 ID:空,AWS 错误代码:407 未经授权,AWS 错误消息: 无法解组错误响应(文件过早结束。)响应 状态码:407 错误码:407 未经授权的请求 ID:null

初始化代码:

protected AmazonEC2 initAmazonSDKClient(String endpoint) {

        AWSCredentials awsCredentials =
                new BasicAWSCredentials(_account.getAccessKey(), _account.getSecretKey());
        ClientConfiguration config = getProxySettings();
        AmazonEC2 ret = CloudServicesEC2Api.getAmazonEC2Client(awsCredentials, config);
        ret.setEndpoint(endpoint);
        _endPointToAmazonEC2Client.put(endpoint, ret);

        return ret;
    }

private ClientConfiguration getProxySettings() {

        ClientConfiguration ret = new ClientConfiguration();
        String host = _proxySettings.getServer();
        if (!StringUtils.isNullOrEmpty(host )) {
            ret.setProxyHost(host );
        }
        if (!StringUtils.isNullOrEmpty(_proxySettings.getPort())) {
            ret.setProxyPort(Integer.valueOf(_proxySettings.getPort()));
        }
        String proxyUserName = _proxySettings.getUserName();
        if (!StringUtils.isNullOrEmpty(proxyUserName)) {
            ret.setProxyUsername(proxyUserName);
        }
        String proxyPassword = _proxySettings.getPassword();
        if (!StringUtils.isNullOrEmpty(proxyPassword)) {
            ret.setProxyPassword(proxyPassword);
        }
        ret.setProxyWorkstation(host );
        ret.setProxyDomain(host );

        return ret;
    }

使用客户端并导致错误的代码:

private List<InstanceStatus> getStatusChecks(AmazonEC2 ec2Client, String[] hostIds) {

        DescribeInstanceStatusRequest describeInstanceRequest =
                new DescribeInstanceStatusRequest().withInstanceIds(hostIds);
        DescribeInstanceStatusResult describeInstanceResult =
                ec2Client.describeInstanceStatus(describeInstanceRequest);

        return describeInstanceResult.getInstanceStatuses();
    }

我知道根本原因是 NTLM 身份验证,我需要以某种方式配置 NTLM 主机和 NTLM 域,在我的代码示例中它的行:

ret.setProxyWorkstation(host );
ret.setProxyDomain(host );

我尝试了几个版本的工作站和域,我尝试将其留空,没有用...

请指教!

【问题讨论】:

    标签: java proxy amazon-ec2 cloud


    【解决方案1】:

    好吧,经过一些研究,结果发现 Amazon SDK 处理 NTLM 代理请求的方式有些不对劲。我们比较了传递给连接成功的其他库(例如 JClouds)的代理参数,并尝试在 Amazon SDK 上应用相同的参数,但没有成功。 我们甚至使用wireshark比较了数据包,一切都是一样的。这个库有点不对劲......

    【讨论】:

      猜你喜欢
      • 2011-06-30
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多