minio sdk使用自签名https证书错误处理
1.问题描述
minio 8.4.4 使用自签名的https的api连接会报错证书错误
1.1 报错日志
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
1.2 maven 依赖配置
<!--minio java sdk-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.4.4</version>
<exclusions>
<exclusion>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.10.0</version>
</dependency>
1.3 当前spring MinioClient配置
@Configuration
@EnableConfigurationProperties(MinioProperties.class)
public class MinioConfig {
@Bean
public MinioClient minioClient(MinioProperties properties){
properties.check();
return MinioClient.builder()
.endpoint(properties.getEndpoint())
.credentials(properties.getAccessKey(), properties.getSecretKey())
.build();
}
}
2.问题分析
通常是因为MinIO默认情况下会验证服务器的TLS证书。在生产环境中,使用自签名证书并不推荐,因为它们不受信任的证书颁发机构(CA)签署,可能会导致安全问题。
3.问题解决
3.1 使用受信任的证书
为了在生产环境中确保安全性,建议获取一个受信任的SSL证书,可以从证书颁发机构(CA)购买,或者使用免费的证书颁发机构(例如Let’s Encrypt)获取SSL证书。
3.2 忽略证书验证
3.2.1 minio客户端
在MinIO客户端(例如mc命令行工具)中,可以使用–insecure选项来忽略证书验证。例如:
mc --insecure <command>
这会告诉MinIO客户端不要验证服务器的TLS证书。请注意,这种做法会降低安全性,不建议在生产环境中使用。
3.2.2 minio sdk 忽略证书验证
在使用Java SDK与自签名证书的服务器进行通信时,一般可以通过自定义SSLContext来忽略证书验证。
MinIO的Java SDK(version 8.0.6及以上)允许自定义OkHttpClient,我们可以使用httpClient方法传递一个自定义的OkHttpClient实例。以便在HTTP、正常HTTPS和自签名HTTPS之间实现兼容性
下面是如何使用自定义的OkHttpClient实现对HTTP、正常HTTPS和自签名HTTPS的兼容性
@Configuration
@EnableConfigurationProperties(MinioProperties.class)
public class MinioConfig {

最低0.47元/天 解锁文章
6189

被折叠的 条评论
为什么被折叠?



