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协议访问
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论