SpringBoot的SSL证书部署,HTTPS安全访问

首先我们访问未拥有证书的证书都是通过HTTP,如果需要变为安全访问HTTPS需要部署证书,HTTPS:SSL+HTTP

首先我们可以访问阿里云或者腾讯云申请免费的证书,这里使用阿里云来演示

申请阿里云免费SSL证书

访问阿里云,搜索SSL证书202112141500091

进入SSL证书控制台,创建一个免费的证书

202112171905564

然后点击证书申请

202112171905977

按照要求填写申请,推荐CSR生成方式为系统生成,现在的阿里云填写申请后,会自动将DNS解析记录添加到对应网站的解析设置内,为了防止没有自动赋值,可以自己看看有没有验证成功,未验证成功就手动添加记录

202112171906905

202112171905977

打开我们的域名解析控制台,我使用的阿里云DNS,进入DNS管理控制台202112171906905

202112171911532

添加你的域名,并且解析DNS到这个域名,这边已经解析了,就不演示了,解析后打开解析设置,将证书申请记录的DNS解析记录赋值到网站解析设置内

202112171913229

202112171914436

验证成功提交审核就好了

下载证书

因为我们使用的是SpringBoot,环境为tomcat所以可以直接下载JKS证书,下载好后,我们会得到2个文件,一个是证书,另外一个是密钥

202112171942185

202112171925635

我们将证书文件丢到resources资源文件夹同级目录下

202112171926578

打开application.yml在里面进行配置

202112171928268

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端口

202112171932552

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了

202112171936398

如果无法跳转,可以查看你的服务器防火墙端口是否开放443,我曾经碰到个BUG,开放了443端口和80端口还是无法访问,重启也没用,最后重置服务器,部署过然后才能访问,果然重装可以解决99%的BUG

posted @ 2021-12-17 19:41  HeiDaotu  阅读(482)  评论(0编辑  收藏  举报