SpringBoot的SSL证书部署,HTTPS安全访问
首先我们访问未拥有证书的证书都是通过HTTP,如果需要变为安全访问HTTPS需要部署证书,HTTPS:SSL+HTTP
首先我们可以访问阿里云或者腾讯云申请免费的证书,这里使用阿里云来演示
申请阿里云免费SSL证书
访问阿里云,搜索SSL证书
进入SSL证书控制台,创建一个免费的证书
然后点击证书申请
按照要求填写申请,推荐CSR生成方式为系统生成,现在的阿里云填写申请后,会自动将DNS解析记录添加到对应网站的解析设置内,为了防止没有自动赋值,可以自己看看有没有验证成功,未验证成功就手动添加记录
打开我们的域名解析控制台,我使用的阿里云DNS,进入DNS管理控制台
添加你的域名,并且解析DNS到这个域名,这边已经解析了,就不演示了,解析后打开解析设置,将证书申请记录的DNS解析记录赋值到网站解析设置内
验证成功提交审核就好了
下载证书
因为我们使用的是SpringBoot,环境为tomcat所以可以直接下载JKS证书,下载好后,我们会得到2个文件,一个是证书,另外一个是密钥
我们将证书文件丢到resources
资源文件夹同级目录下
打开application.yml在里面进行配置
server:
port: 443 # 代表443为https
ssl:
key-store: classpath:heidaotu.cn.jks # 验证文件地址,这边是在resources资源文件夹,所以使用classpath: 如果在其他文件夹使用file:
key-store-password: 34af27bo9y5 # 密钥
key-store-type: JKS # 证书类型
enabled: true # 启动证书,这个是默认启动,可以不需要填写
到这里运行spring boot项目试试吧,在控制台会显示http为80端口,https为443端口,我们访问默认为80端口,如果想要访问自动为443端口可以创建一个配置文件,用来自动跳转到443端口
http自动跳转到https
这是配置文件,我们只需要复制粘贴直接使用即可,如果你的端口有自定义的话,就只需要更改监听的端口号和跳转端口号即可
package com.example.studentspringbootmybatisplus.config;
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.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class HttpToHttpsConfig {
public static void main(String[] args) {
SpringApplication.run(HttpToHttpsConfig.class, args);
}
/**
* http重定向到https
* @return
*/
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
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的端口号
connector.setRedirectPort(443);
return connector;
}
}
这时我们访问网站就自动跳转到https了
如果无法跳转,可以查看你的服务器防火墙端口是否开放443,我曾经碰到个BUG,开放了443端口和80端口还是无法访问,重启也没用,最后重置服务器,部署过然后才能访问,果然重装可以解决99%的BUG