springboot如何配置ssl支持https

 更新时间:2024年10月16日 17:04:55   作者:GKFreewind  
在SpringBoot应用中配置SSL支持HTTPS需要创建KeyStore并在application.yml中进行相应配置,首先,使用java的keytool工具创建KeyStore,这涉及到设置密钥对、指定密钥算法(RSA)、密钥大小(2048位)、密钥库名称、证书有效期等,创建KeyStore后

springboot 配置ssl支持https

以下信息请根据实际情况修改!!!

创建keystore

KeyStore是一个用于存储和管理加密密钥和证书的存储库。

它通常被用于各种应用和系统中,以保护敏感数据和确保安全通信。

KeyStore可以被看作是一种加密的“保险箱”,用于存放密钥、密钥对和证书等安全相关的数据。

通过java的keytool创建keyStore

keytool -genkeypair -alias mykey -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 -storepass mypassword -keypass mypassword -dname "CN=localhost, OU=MyOrg, O=MyOrg, L=MyCity, ST=MyState, C=MyCountry"

解释各个参数:

  • -genkeypair:生成密钥对(公钥和私钥)。
  • -alias mykey:指定密钥的别名(在密钥库中引用密钥时使用)。
  • -keyalg RSA:指定密钥算法(这里是 RSA)。
  • -keysize 2048:指定密钥大小(位)。
  • -keystore keystore.jks:指定密钥库文件的名称(如果文件不存在,则创建它)。
  • -validity 365:指定证书的有效期(天)。
  • -storepass mypassword:指定密钥库的存储密码。
  • -keypass mypassword:指定密钥的密码(如果与密钥库密码相同,可以省略)。
  • -dname:指定证书的主题信息(DN,Distinguished Name),包括通用名称(CN)、组织单位(OU)、组织(O)、城市(L)、州/省(ST)和国家(C)。

在springboot的application.yml配置文件中配置相关内容

server:  
  port: 8443 # HTTPS的默认端口是443,但443端口通常需要管理员权限才能绑定  
  ssl:  
    key-store: classpath:keystore.jks # 密钥库的位置,相对于classpath  对应keytool生成时的-keystore
    key-store-type: JKS # 密钥库类型,默认为JKS  
    key-store-password: mypassword # 密钥库密码  对应keytool生成时的-storepass
    key-alias: mykey # 密钥别名  对应keytool生成时的-alias
    key-password: mypassword # 密钥别名  对应keytool生成时的-keypass
    # 如果你使用的是PKCS12密钥库,则需要如下配置,相应信息根据实际情况修改
    # key-store-type: PKCS12  
    # key-store: classpath:keystore.p12  
    # key-store-password: yourpassword  
    # 如果需要,还可以配置信任库  
    # trust-store: classpath:truststore.jks  
    # trust-store-password: trustpassword  
    # trust-store-type: JKS  
    # 启用SSL客户端认证(可选)  
    # client-auth: need

springboot应用支持https实现

jdk自带证书生成

切换到jdk目录下bin目录,执行

  • keytool -genkey -alias (别名)
  • -dname "CN=(姓名),OU=(组织单位名称),O=(组织名称),L=(城市名称),ST=(省),C=(国家)"
  • -storetype (密钥仓库类型)
  • -keyalg (生证书的算法名称) -keysize (密钥长度,证书大小)
  • -keystore (指定生成证书的位置和证书名称)
  • -validity (证书有效期,天单位)

列:

keytool -genkey -alias lyc -dname "CN=l,OU=SC,O=yd,L=lc,ST=sc,C=CN" -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365

配置https协议

springboot+tomcat,增加代码configuration配置项如下:

import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TomcatHttpsConfig {

    @Bean
    public Connector connector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setSecure(false);
        connector.setPort(80);
        connector.setRedirectPort(443);
        return connector;
    }

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

}

springboot+undertow,增加代码configuration配置项如下:

import io.undertow.Undertow;
import io.undertow.UndertowOptions;
import io.undertow.servlet.api.SecurityConstraint;
import io.undertow.servlet.api.SecurityInfo;
import io.undertow.servlet.api.TransportGuaranteeType;
import io.undertow.servlet.api.WebResourceCollection;
import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;

public class UndertowHttpsConfig {
    private int httpPort = 80;
    private int httpsPort = 443;

    @Bean
    public ServletWebServerFactory undertowFactory() {
        UndertowServletWebServerFactory undertowFactory = new UndertowServletWebServerFactory();
        undertowFactory.addBuilderCustomizers((Undertow.Builder builder) -> {
            builder.addHttpListener(httpPort, "0.0.0.0");
            // 开启HTTP2
            builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true);
        });
        undertowFactory.addDeploymentInfoCustomizers(deploymentInfo -> {
            // 开启HTTP自动跳转至HTTPS
            deploymentInfo.addSecurityConstraint(new SecurityConstraint()
                    .addWebResourceCollection(new WebResourceCollection().addUrlPattern("/*"))
                    .setTransportGuaranteeType(TransportGuaranteeType.CONFIDENTIAL)
                    .setEmptyRoleSemantic(SecurityInfo.EmptyRoleSemantic.PERMIT))
                    .setConfidentialPortManager(exchange -> httpsPort);
        });
        return undertowFactory;
    }
}

完成以上配置之后,启动项目

访问:https://localhost:443/test/test实现springboot的https协议访问

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 注解的使用实例详解

    Java 注解的使用实例详解

    这篇文章主要介绍了Java 注解的使用实例详解的相关资料,需要的朋友可以参考下
    2016-12-12
  • Java 中的io模型详解

    Java 中的io模型详解

    这篇文章主要介绍了Java 中io模型的相关资料,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-04-04
  • Java设计模式之适配器模式的实现

    Java设计模式之适配器模式的实现

    这篇文章主要介绍了Java设计模式之适配器模式的实现,适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁,这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能,需要的朋友可以参考下
    2023-11-11
  • java实现的新浪微博分享代码实例

    java实现的新浪微博分享代码实例

    这篇文章主要介绍了java实现的新浪微博分享代码实例,是通过新浪API获得授权,然后接受客户端请求的数据,第三方应用发送请求消息到微博,唤起微博分享界面,非常的实用,有相同需要的小伙伴可以参考下。
    2015-03-03
  • 详解如何使用Spring的@FeignClient注解实现通信功能

    详解如何使用Spring的@FeignClient注解实现通信功能

    SpringBoot是一个非常流行的Java框架,它提供了一系列工具来使这种交互无缝且高效,在这些工具中,@FeignClient注解因其易用性和强大的功能而脱颖而出, 在这篇文章中,我们将探讨如何使用Spring的@FeignClient注解进行客户端-服务器通信,需要的朋友可以参考下
    2023-11-11
  • 完美解决因数据库一次查询数据量过大导致的内存溢出问题

    完美解决因数据库一次查询数据量过大导致的内存溢出问题

    今天小编就为大家分享一篇完美解决因数据库一次查询数据量过大导致的内存溢出问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • SpringBoot启动报错属性循环依赖报错问题的解决

    SpringBoot启动报错属性循环依赖报错问题的解决

    这篇文章主要介绍了SpringBoot启动报错属性循环依赖报错问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Spring Bean的包扫描的实现方法

    Spring Bean的包扫描的实现方法

    这篇文章主要介绍了Spring Bean的包扫描的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • java.lang.NullPointerException异常问题解决方案

    java.lang.NullPointerException异常问题解决方案

    这篇文章主要介绍了java.lang.NullPointerException异常问题解决方案,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 关于SpringBoot自定义条件注解与自动配置

    关于SpringBoot自定义条件注解与自动配置

    这篇文章主要介绍了关于SpringBoot自定义条件注解与自动配置,Spring Boot的核心功能就是为整合第三方框架提供自动配置,而本文则带着大家实现了自己的自动配置和Starter,需要的朋友可以参考下
    2023-07-07

最新评论