spring boot 启用https

本文介绍了如何使用JDK生成自签名证书,并在SpringBoot项目中配置该证书进行HTTPS通信。此外,还展示了如何在Feign客户端中信任自签证书,以实现安全的微服务间通信。

一、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}
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值