前提
- 云服务器已经购买并配置好了安全组。
- 域名已经购买并配置好了SSL。
腾讯云或阿里云的官方文档有很详细的介绍。
SpringBoot配置
我是购买的腾讯云的域名和SSL免费证书(一年有效期),
下载SSL证书
.txt 是密码, .jks 是我们需要的证书配置
配置.yml
文件
server:
port: 443
ssl:
key-store: classpath:wuwufq.asia.jks
key-store-password: 41aaaaaa
key-store-type: JKS
enabled: true
配置HTTP重定向HTTPS
在启动类Application
(有@SpringBootApplication
注解的类)里
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.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class FreerideApplication {
public static void main(String[] args) {
SpringApplication.run(FreerideApplication.class, args);
}
/**
* http重定向到https
* @return
*/
@Bean
public TomcatServletWebServerFactory 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(httpConnector());
return tomcat;
}
@Bean
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
//Connector监听的http的默认端口号
connector.setPort(80);
connector.setSecure(false);
//监听到http的端口号后转向到的https的端口号,也就是项目配置的port
connector.setRedirectPort(443);
return connector;
}
}
我的SpringBoot是2.4.x的,1.5.x的写法有所不一样,可自行百度
配置服务器
把刚才的SSL.jks文件上传到服务器,和jar包同级目录即可。
现在重新打包jar包,上传服务器就可以HTTPS访问了。