尝试访问我们的本地S3存储时,我首先遇到了证书丢失的问题:
线程“ main”中的异常com.amazonaws.SdkClientException:无法执行 执行HTTP请求:sun.security.validator.ValidatorException:PKIX 路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法执行 找到到所请求目标的有效认证路径
关闭证书检查:
System.setProperty(SDKGlobalConfiguration.DISABLE_CERT_CHECKING_SYSTEM_PROPERTY, “ true”);
我设法“连接”到服务器。但是,使用下面的代码不会产生任何结果(又称空列表)。到目前为止非常简单。
端点和存储桶名称都应该正确,因为我没有将其粘贴到(工作的)S3浏览器中。
凭据似乎也是正确的,因为当我弄乱密码时,我正在404中运行。再次-从y S3浏览器复制了那些。
使用S3浏览器,我可以访问存储桶,添加文件等等。
运行List<Bucket> buckets = s3Client.listBuckets();
时,它只会返回一个空列表-没有任何异常。
控制台输出为:
朱利03,2019 8:48:07 NACHM。 com.amazonaws.http.AmazonHttpClient createSocketFactoryRegistry WARNUNG:SSL证书检查 端点已被明确禁用。朱利03,2019 8:48:08 NACHM。 com.amazonaws.auth.profile.internal.BasicProfileConfigLoader loadProfiles WARNUNG:您的个人资料名称包含“个人资料”前缀。 在Java SDK中,这被视为配置文件名称的一部分,因此您 您需要在个人资料名称中包含此前缀 从您的Java代码中引用此配置文件。 Juli 03,2019 8:48:08 NACHM。 com.amazonaws.auth.profile.internal.BasicProfileConfigLoader loadProfiles WARNUNG:您的个人资料名称包含“个人资料”前缀。 在Java SDK中,这被视为配置文件名称的一部分,因此您 您需要在个人资料名称中包含此前缀 从您的Java代码中引用此配置文件。 Juli 03,2019 8:48:23 NACHM。 com.amazonaws.http.AmazonHttpClient createSocketFactoryRegistry WARNUNG:端点的SSL证书检查已明确 禁用。
有什么建议吗?
System.setProperty(SDKGlobalConfiguration.DISABLE_CERT_CHECKING_SYSTEM_PROPERTY, "true");
String accessKey = "myaccess";
String secretKey = "mysecret";
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
ClientConfiguration clientConfig = new ClientConfiguration();
clientConfig.setProtocol(Protocol.HTTPS);
EndpointConfiguration endpointConfig = new EndpointConfiguration("endpoint.com", Regions.EU_CENTRAL_1.getName());
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(credentials))
//.withRegion(defaultRegion)
.withEndpointConfiguration(endpointConfig)
.build();
List<Bucket> buckets = s3Client.listBuckets();
for (Bucket bucket : buckets) {
System.out.println(
bucket.getName() +
"\t" +
StringUtils.fromDate(bucket.getCreationDate())
);
}
运行List<Bucket> buckets = s3Client.listBuckets();
时,它只会返回一个空列表-没有任何异常。
(根据S3浏览器)此存储分区的根目录中有2个文件。
控制台输出为:
朱利03,2019 8:48:07 NACHM。 com.amazonaws.http.AmazonHttpClient createSocketFactoryRegistry WARNUNG:SSL证书检查 端点已被明确禁用。朱利03,2019 8:48:08 NACHM。 com.amazonaws.auth.profile.internal.BasicProfileConfigLoader loadProfiles WARNUNG:您的个人资料名称包含“个人资料”前缀。 在Java SDK中,这被视为配置文件名称的一部分,因此您 您需要在个人资料名称中包含此前缀 从您的Java代码中引用此配置文件。 Juli 03,2019 8:48:08 NACHM。 com.amazonaws.auth.profile.internal.BasicProfileConfigLoader loadProfiles WARNUNG:您的个人资料名称包含“个人资料”前缀。 在Java SDK中,这被视为配置文件名称的一部分,因此您 您需要在个人资料名称中包含此前缀 从您的Java代码中引用此配置文件。 Juli 03,2019 8:48:23 NACHM。 com.amazonaws.http.AmazonHttpClient createSocketFactoryRegistry WARNUNG:端点的SSL证书检查已明确 禁用。
有什么建议吗?
答案 0 :(得分:0)
所以我终于要回答自己了。
使用
禁用端点验证System.setProperty(SDKGlobalConfiguration.DISABLE_CERT_CHECKING_SYSTEM_PROPERTY, "true");
就像魅力一样。该问题有两个原因:
第1点可以通过访问对象列表来解决:
ObjectListing objects = conn.listObjects("/my_bucket_name");
第2点显然可以通过在存储桶名称中添加前导“ /”来解决。
干杯
奥利