我正在使用 amazon SDK 1.5.6 并尝试使用代理服务器初始化连接。
初始化成功,但是当我尝试使用 AmazonEC2Client
时,它失败并显示以下内容
错误:
Caught Exception: Status Code: 407, AWS Service: AmazonEC2, AWS Request ID: null, AWS Error Code: 407 Unauthorized, AWS Error Message: Unable to unmarshall error response (Premature end of file.) Reponse Status Code: 407 Error Code: 407 Unauthorized Request 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 );
我尝试了多个版本的工作站和域,我尝试将其留空,但没有用......
请多多指教!
最佳答案
好吧,经过一些研究,发现 Amazon SDK 处理 NTLM 代理请求的方式有些不对劲。我们比较了传递到连接成功的其他库(例如 JClouds)的代理参数,并尝试在 Amazon SDK 上应用相同的参数,但没有成功。 我们甚至使用wireshark比较了数据包,一切都是一样的。这个库有点不对劲...
关于java - 在 Amazon SDK 上使用 NTLM 身份验证配置代理设置时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20402454/