Linux Springboot项目配置Https请求

本文详细介绍了如何在SpringBoot项目中配置HTTPS,包括使用JDK的keytool生成证书,设置项目配置,修改配置文件以及启动后的验证。步骤清晰,适合开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


配置SpringBoot项目使用https协议

一、创建证书

1、在这就不使用阿里云或腾讯云申请的SSL免费证书了,使用JDK自带的keytool工具来生成证书:

在linux中查找JDK的安装目录\bin\keytool,使用以下命令:

## -validity 3650 指的是有效时间
## tomcat 指的是别名
## tomcat.keystore 需要生成的证书,将证书根据开发要求放到指定位置,一般放到/resources/conf/./keytool -genkey -alias tomcat -keyalg RSA -keystore /asop/apache-tomcat8.5.73/conf/tomcat.keystore  -validity 3650


输入密钥库口令:  zxcvbnm
再次输入新口令:   zxcvbnm
您的名字与姓氏是什么?
  [Unknown]:  localhost   这里最好写服务器的IP或者域名
您的组织单位名称是什么?
  [Unknown]:  sichu      
您的组织名称是什么?
  [Unknown]:  yanfa       可随意写
您所在的城市或区域名称是什么?
  [Unknown]:  beijing			可随意写
您所在的省//自治区名称是什么?
  [Unknown]:  beijing			可随意写
该单位的双字母国家/地区代码是什么?
  [Unknown]:  cn			
CN=www.bo.org, OU=xinwei, O=xinwei, L=bj, ST=bj, C=cn是否正确?
  []:  y 
  
然后要求我们输入tomcat的主密码,我们设置跟上面第一次输入的密码相同,按回车

2.以上步骤执行完,会出现提示让更换pkcs12格式,复制提示中的指令,并粘贴执行再次输入以上密码即可,以下是我自己的操作命令:

# 换不换都一样,没啥太大影响,既然提示了就老实的跟着换吧.

keytool -importkeystore -srckeystore /asop/apache-tomcat-8.5.73/conf/tomcat.keystore -destkeystore /asop/apache-tomcat-8.5.73/conf/tomcat.keystore -deststoretype pkcs12
  1. 配置好以上操作我们的证书就已经生成了,可在配置的路径下查看配置好的证书,就可以执行第二步操作了。

二、配置项目

1、在springboot 项目启动类中加上以下代码

    @Bean
    public Connector connector(){
        Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(80);
        connector.setSecure(false);
        connector.setRedirectPort(8080);    #这里的8080可更改为项目需要端口,其它不做修改
        return connector;
    }

    @Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory(Connector connector){
        TomcatServletWebServerFactory tomcat=new TomcatServletWebServerFactory(){
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint=new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection=new SecurityCollection();
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(connector);
        return tomcat;
    }

三、配置文件修改

## 这里配置的是证书存放的位置
server.ssl.key-store=/asop/apache-tomcat-8.5.73/conf/tomcat.keystore
## 这里是查看证书需要的密钥
server.ssl.key-store-password=zxcvbnm
## 这是以上步骤申请证书时的那个别名
server.ssl.key-alias=tomcat
## 这里的PKCS12格式配置的是一种互联网标准
server.ssl.key-store-type=PKCS12

四、启动

1、以上操作执行完毕后,就可以启动程序查看,此时http已更改为https请求;
在这里插入图片描述

<think>嗯,用户想了解SpringBoot项目中实现HTTPS请求的方法。用户提供了站内引用作为参考,虽然大部分与HTTP请求相关,但其中引用[2]提到了响应式编程(WebClient),这正是实现HTTPS的重要工具之一。用户明显是个开发者,从提问方式看有一定SpringBoot基础,但可能第一次接触HTTPS集成。需要提供完整但不过于复杂的解决方案。核心关注点应该是:1.证书配置(用户可能最头疼的部分)2.两种主流HTTP客户端的HTTPS适配(RestTemplate和WebClient)3.常见问题的规避(如证书校验)注意到用户引用[3]详细介绍了HTTP请求工具,正好可以延伸。考虑优先推荐WebClient,因为引用[2]强调的响应式特性更适合现代应用,而且其SSL配置更简洁。需要特别注意证书处理的细节。用户引用[4]提到过异常处理,因此要在示例中加入规避StackOverflowError等常见错误的提示(比如在配置类中添加@Lazy)。另外Thymeleaf示例(引用[5])虽然无关,但说明用户可能有前端需求,不过本次暂不涉及。重点结构:-证书准备环节要明确keytool命令参数(用户可能在Windows/Linux环境)-示例代码需要区分传统同步和响应式两种模式-补充"测试建议"环节预防实际部署问题</think> 以下是在Spring Boot项目中实现HTTPS请求的完整指南,包含证书配置、代码实现和常见问题解决: ### 一、HTTPS配置核心步骤 1. **生成SSL证书**(测试环境): ```bash keytool -genkeypair -alias myhttps -keyalg RSA \ -keysize 2048 -storetype PKCS12 -keystore keystore.p12 \ -validity 3650 -storepass changeit ``` > 📌 将生成的`keystore.p12`放在`src/main/resources`目录下 2. **application.yml配置**: ```yaml server: ssl: key-store: classpath:keystore.p12 key-store-password: changeit key-store-type: PKCS12 key-alias: myhttps port: 8443 # HTTPS默认端口 ``` ### 二、HTTP客户端实现HTTPS请求 #### 方案1:使用RestTemplate(同步) ```java @Configuration public class HttpsConfig { @Bean public RestTemplate restTemplate() throws Exception { SSLContext sslContext = new SSLContextBuilder() .loadTrustMaterial( new ClassPathResource("keystore.p12").getFile(), "changeit".toCharArray() ).build(); HttpClient client = HttpClients.custom() .setSSLContext(sslContext) .build(); return new RestTemplateBuilder() .requestFactory(() -> new HttpComponentsClientHttpRequestFactory(client)) .build(); } } // 使用示例 @Service public class ApiService { @Autowired private RestTemplate restTemplate; public String fetchHttpsData() { return restTemplate.getForObject("https://api.example.com/data", String.class); } } ``` #### 方案2:使用WebClient(响应式,推荐) ```java @Bean public WebClient webClient() throws SSLException { SslContext sslContext = SslContextBuilder .forClient() .trustManager(ResourceUtils.getFile("classpath:keystore.p12")) .build(); return WebClient.builder() .clientConnector(new ReactorClientHttpConnector( HttpClient.create().secure(t -> t.sslContext(sslContext)) )) .build(); } // 使用示例 public Mono<String> fetchReactiveData() { return webClient.get() .uri("https://api.example.com/reactive-data") .retrieve() .bodyToMono(String.class); } ``` ### 三、绕过证书验证(仅限测试环境) ```java // RestTemplate忽略SSL验证 @Bean public RestTemplate insecureRestTemplate() throws Exception { TrustStrategy acceptingTrustStrategy = (chain, authType) -> true; SSLContext sslContext = SSLContexts.custom() .loadTrustMaterial(null, acceptingTrustStrategy) .build(); return new RestTemplate(new HttpComponentsClientHttpRequestFactory( HttpClients.custom().setSSLContext(sslContext).build() )); } ``` ### 四、常见问题解决 1. **证书校验失败**: ```java SSLHandshakeException: PKIX path building failed ``` **✅ 解决方案**: - 正确配置信任库(参考方案1/2) - 添加`@PostConstruct`初始化信任管理器: ```java @PostConstruct public void disableSSLValidation() { // 仅用于测试环境 TrustManager[] trustAll = new TrustManager[]{ new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) {} public void checkServerTrusted(X509Certificate[] chain, String authType) {} }}; SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAll, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } ``` 2. **连接超时调整**: ```java // WebClient增加超时配置 HttpClient.create() .secure(ssl -> ssl.sslContext(sslContext)) .responseTimeout(Duration.ofSeconds(30)); ``` ### 五、最佳实践建议 1. **生产环境**: - 使用CA签发的正式证书(如Let's Encrypt) - 定期轮换证书(Spring Cloud Config支持自动刷新) - 启用HSTS响应头: ```yaml server: tomcat: hsts: enabled: true max-age: 31536000 # 1年强制HTTPS ``` 2. **混合HTTP/HTTPS**: ```java @Configuration public class MultiConnectorConfig { @Bean public ServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory(); tomcat.addAdditionalTomcatConnectors(createHttpConnector()); return tomcat; } private Connector createHttpConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setPort(8080); return connector; } } ``` --- 📚 **参考资料** 1. [Spring Boot官方SSL文档](https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.webserver.configure-ssl) 2. [WebClient安全配置指南](https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#webflux-client) 3. [阿里巴巴HTTPS最佳实践](https://developer.aliyun.com/article/694418) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值