springboot的https即SSL证书配置

前言

因为小程序所请求的后台必须为https://所以SSL证书配置不可获缺,这里不能使用tomcat自制证书必须去购买各大云服务器都有免费的证书可以申请

一、搞个证书

springboot的https即SSL证书配置_第1张图片
springboot的https即SSL证书配置_第2张图片
springboot的https即SSL证书配置_第3张图片
springboot的https即SSL证书配置_第4张图片
专家安装84元????没错,本篇文章价值84元,就算我不是专家,那也值80元

  • 下载之后解压到一个文件夹里面包含2个文件springboot的https即SSL证书配置_第5张图片
  • TXT文件中包含的就是密码

二、打包为jks文件

  • 为啥要打包为jks文件?
    • 因为Tomcat 目前只能操作 JKS、PKCS11、PKCS12 格式的密钥存储库
  1. 在CMD中进入jdk的bin目录
  2. 输入转换命令
keytool -importkeystore -srckeystore G:\https\2247331_abstergo.xin.pfx -destkeystore myWeb.jks -srcstoretype PKCS12 -deststoretype JKS
  • G:\https\2247331_abstergo.xin.pfx就是第一步中解压的地址
    在这里插入图片描述
    这里要输入3个密码来字解压文件中的TXT文件内的密码
    不要看他说输入新口令,信了就两个小时后见。实际上必须输入那一个密码,要输入三次一样,输入三次一样,输入三次一样!!!,不然会一直报端口被占用这个错,不要问我为什么,我找了2个小时,找了所有的帖子都没有解决的办法,还好我机智…
  • 记住别名,配置文件中需要填写,记不住也没关系,反正可以查
    springboot的https即SSL证书配置_第6张图片
    回车之后会多出这样一个文件,复制到resource目录下与application.properties同级
  • 检查是否建立成功(也可以查看别名
    keytool -list -v -keystore myWeb.jks
    检测jks是否有误
    springboot的https即SSL证书配置_第7张图片

    三、配置application.properties

    jks文件要和application.properties同级
    springboot的https即SSL证书配置_第8张图片
    	#https加密端口号 443
    	server.port=443
    	#SSL证书路径 一定要加上classpath:
    	server.ssl.key-store=classpath:myWeb.jks
    	#SSL证书密码
    	server.ssl.key-store-password=你的密码
    	#证书类型
    	server.ssl.key-store-type=JKS
    	#证书别名
    	server.ssl.key-alias=alias
    
    没有classpath:也会报端口被占用的错,人类的本质是…

四、http自动跳转为https

package com.example.demo;

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 DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.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(1024);
		connector.setSecure(false);
		//监听到http的端口号后转向到的https的端口号
		connector.setRedirectPort(443);
		return connector;
	}

}

你可能感兴趣的:(springboot)