SpringBoot项目两步完成HTTPS配置
1.配置文件中添加SSL配置
application.yml文件
# 配置端口
server:
port: 443
#生成的证书名字
ssl:
key-store: classpath:证书文件名.pfx //文件路径,这里我使用了pfx格式并且把SSL证书放到了src/main/resources路径下(classpath:表示在src/main/resources路径)
#钥库密码
key-store-password: 证书密码 //证书密码
key-store-type: PKCS12 //证书类型 pfx格式对应的PKCS12
application.properties文件
server.port=443 //端口号
server.ssl.key-store=classpath:证书文件名.pfx //文件路径
server.ssl.key-store-password=证书密码 //证书密码
server.ssl.key-store-type=PKCS12 //证书类型
服务器的证书格式:
- .DER .CER,文件是二进制格式,只保存证书,不保存私钥。
- .PEM,一般是文本格式,可保存证书,可保存私钥。
- .CRT,可以是二进制格式,可以是文本格式,与 .DER 格式相同,不保存私钥。
- .PFX .P12,二进制格式,同时包含证书和私钥,一般有密码保护。
- .JKS,二进制格式,同时包含证书和私钥,一般有密码保护;使用Java提供的密码库。通过Java的Keytool工具,生成
SSL证书一般安装在服务器上,而主流的Web服务软件,通常都基于两种基础密码库:OpenSSL和Java
Tomcat、Weblogic、JBoss: .JKS(Tomcat也可以用.pfx格式)
Apache、Nginx: 使用OpenSSL提供的密码库,生成PEM、KEY、CRT等格式的证书文件。
2.创建HTTP跳转HTTPS配置文件
package cn.com.order.yiting.config;
import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
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.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Description ConnectorConfig接口实现
* @Author W_Messi
* @CrateTime 2020-04-25 19:31:04
*/
@Configuration
public class ConnectorConfig {
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = 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);
}
};
tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
return tomcat;
}
/**
* 让我们的应用支持HTTP是个好想法,但是需要重定向到HTTPS,
* 但是不能同时在application.properties中同时配置两个connector,
* 所以要以编程的方式配置HTTP connector,然后重定向到HTTPS connector
* @return Connector
*/
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(80); // http端口
connector.setSecure(false);
connector.setRedirectPort(443); // application.properties中配置的https端口
return connector;
}
}
参考:
配置参考:https://blog.csdn.net/qq_24641227/article/details/93893941
SSL资料参考:https://www.gworg.com/problems/1023.html