一、JDK生成自签证书,以管理员身份运行CMD窗口
命令:keytool -genkey -alias testhttps -keyalg RSA -keysize 2048 -validity 36500 -keystore "D:/tmp/ssl/testhttps.keystore"
命令解释:
• -genkey 表示要创建一个新的密钥。
• -alias 表示 keystore 的别名。
• -keyalg 表示使用的加密算法是 RSA。
• -keysize 表示密钥的长度.。
• -keystore 表示生成的密钥存放位直。
• -validity 表示密钥的有效时间,单位为天。
二、在springboot 中项目配置证书
1. 将第一步生成的 testhttps.keystore 文件放入 /resource 目录下(即classpath目录)

2. 在application.yml 配置文件中添加ssl 相关配置
server:
port: 8301
ssl:
#类路径下的自签证书
key-store: classpath:hics_https.keystore
# 证书别名
key-alias: hics
#证书密码
key-store-password: 123456
# 证书类型
key-store-type: JKS
# 开启证书验证
enabled: true
spring:
feign-user:
value: https://user-service
path: /user_api
三、Feign设置
import feign.Client;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory;
import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.net.ssl.*;
import java.security.*;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
/**
* @author
* @program
* @description
* @packagename
* @date 2023-05-30 15:17
**/
@Configuration
public class FeignHttpsConfig {
@Bean
@ConditionalOnMissingBean
public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory,
SpringClientFactory clientFactory) throws NoSuchAlgorithmException, KeyManagementException {
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
ctx.init(null, new TrustManager[]{tm}, null);
return new LoadBalancerFeignClient(new Client.Default(ctx.getSocketFactory(),
new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
//Auto-generated method stub
return true;
}
}),
cachingFactory, clientFactory);
}
}
@FeignClient(
value = "${spring.feign-user.value:}",path="${spring.feign-user.path:}",url = "${spring.feign-user.url:}",
fallback = AuthClientFallback.class,configuration = {FeignHttpsConfig.class}
)
本文介绍了如何使用JDK生成自签名证书,并在SpringBoot项目中配置该证书进行HTTPS通信。此外,还展示了如何在Feign客户端中信任自签证书,以实现安全的微服务间通信。

2730

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



