1/生成证书
直接使用java自带的命令keytool来生成,生成命令如下:
keytool -genkey -alias server -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
各个参数的含义:
0.-alias 别名
1.-storetype 指定密钥仓库类型
2.-keyalg 生证书的算法名称,RSA是一种非对称加密算法
3.-keysize 证书大小
4.-keystore 生成的证书文件的存储路径
5.-validity 证书的有效期
如下图所示:
2/application.properties文件配置证书,启用HTTPS
生成证书后,将keystone文件拷贝到我们项目的src/main/resources下,然后修改application.properties文件,添加HTTPS支持。在application.properties中添加如下代码:
#SpringBoot启动端口指定
server.port=9999
# 证书目录
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=QC_class
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=server
如下图所示:
3/添加SSL配置类,开启HTTP自动转向HTTPS
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;
/**
* SSLConfig
*
* @author QC班长
* @since 2019/12/25
*/
@Configuration
public class SSLConfig {
//SSLConfig
@Bean
public TomcatServletWebServerFactory servletContainer() { //springboot2 新变化
TomcatServletWebServerFactory tomcatServletWebServerFactory = 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);
}
};
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);//Connector监听的http的端口号,端口号可以自己指定
connector.setSecure(false);
connector.setRedirectPort(9999);//监听到http的端口号后转向到的https的端口号,端口号可以自己指定
tomcatServletWebServerFactory.addAdditionalTomcatConnectors(connector);
return tomcatServletWebServerFactory;
}
}