目录
- springboot 配置ssl支持https
- 创建keystore
- 在springboot的application.yml配置文件中配置相关内容
- springboot应用支持https实现
- jdk自带证书生成
- 配置https协议
- 总结
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:指定密钥的别名(在密钥库中引用密钥时使用)。-keyalpythong 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.wepythonb.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");
conjavascriptnector.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.SecurityCFHsOWonstraint;
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协议访问
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
加载中,请稍侯......
精彩评论