当前位置: 代码网 > it编程>编程语言>Java > springboot如何配置ssl支持https

springboot如何配置ssl支持https

2024年10月27日 Java 我要评论
springboot 配置ssl支持https以下信息请根据实际情况修改!!!创建keystorekeystore是一个用于存储和管理加密密钥和证书的存储库。它通常被用于各种应用和系统中,以保护敏感数

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协议访问

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com