SslBundle integration with FeignClients

未关闭
#974 7 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
55/100
Issue 类型
功能
描述清晰度
基本清楚
活跃度
活跃
技术栈
java, spring-boot
领域
api, backend

调研方向

从 Feign 客户端配置入口开始,比较所示的 SslBundles/SSLContext 方案与 RestTemplateBuilder.setSslBundle。跟踪 Feign 客户端如何构建其 Client,并确定可以在哪里选择 SSL bundle。完成标准是 FeignClients 可以使用已配置的 Spring Boot SSL bundle,并且行为和失败处理都有测试覆盖。

由索引模型根据 Issue 内容生成。

描述

enhancement help wanted

Recently, in spring-boot 3.1, spring team introduced the SslBundles component as a convenient way to configure SSL connection to RestTemplate and RestClient.

As reference: https://spring.io/blog/2023/06/07/securing-spring-boot-applications-with-ssl

I similar approach would be interesting to exist in the spring-cloud-openfeign.

I am currently taking the following approach:

application.yml

spring:
 ssl:
   bundle:
     jks:
       secure-service:
         key:
           alias: "secure-service"
         keystore:
           location: "classpath:keystore.p12"
           password: "myStrongPassword"
           type: "PKCS12"
    @Bean
    @ConditionalOnProperty(prefix = "spring.ssl.bundle.jks.secure-service.key", name = "alias")
    public Client feignClient(SslBundles sslBundles) throws Exception {
        // "secure-service" is defined in application properties
        try {
            SslBundle sslBundle = sslBundles.getBundle("secure-service");
            SSLContext sslContext = sslBundle.createSslContext();
            log.info("Configuring SSL Context for FeignClient");
            return new Client.Default(sslContext.getSocketFactory(), new DefaultHostnameVerifier());
        } catch (NoSuchSslBundleException ex) {
            log.error("SSLContext not provided. Creating FeignClient without sslContext.");
            throw new IllegalStateException("spring.ssl.bundle.jks.secure-service.key.alias not configure correctly. Please change your application properties, yml or environment configuration.");
        }
    }

I proposed approach would be similar to this:


    @Bean
    public restTemplate(RestTemplateBuilder restTemplateBuilder, SslBundles sslBundles) {
        this.restTemplate = restTemplateBuilder.setSslBundle(sslBundles.getBundle("secure-service")).build();
    }

Further reference: https://www.baeldung.com/spring-boot-security-ssl-bundles

主要语言
Java
星标
1.3k
派生
834
平均合并
1 天 15 小时
30 天内合并 PR
14

环境准备

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

spring-cloud/spring-cloud-openfeign 的其他 Issue

查看 spring-cloud/spring-cloud-openfeign 的全部 Issue

相似的 Issue

更多 Java Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。