Springboot 启用 https 安全协议

有时候我们需要使用 https 安全协议,本文记录在 SpringBoot 项目启用 https。

生成证书

自签名证书

使用 java jdk 自带的生成 SSL 证书的工具 keytool 生成自己的证书

打开 cmd,输入命令生成证书:

keytool -genkeypair -alias tomcat_https -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore e:/tomcat_https.keystore -storepass 123456

如下图所示:

image-20211217150947402

项目配置

导入证书

把生成的 tomcat_https.keystore 放在 resources 里:

image-20211217151120125

配置文件

application.properties 配置文件中增加配置:

#https默认端口:443,http默认端口:80
server.port=443
server.http-port=80

#开启https,配置跟证书一一对应
server.ssl.enabled=true
#指定证书
server.ssl.key-store=classpath:tomcat_https.keystore
server.ssl.key-store-type=JKS
#别名
server.ssl.key-alias=tomcat_https
#密码
server.ssl.key-password=123456
server.ssl.key-store-password=123456

spring.application.name=springboot-https

加载 keystore 文件

Springboot 工程可能出现不能加载.keystore 文件的情况 (can not load .keystore)

明明是加入到了类路径,但却没有加载,于是到编译生成的 target\class 去找 tomcat_https.keystore 文件,发现确实没有这个文件,那么就是在编译的时候将这个 tomcat_https.keystore 文件排除了。

注意 tomcat_https.keystore 文件是二进制文件,应该是这个插件将这个过滤了。

此时,需要在项目 pom 文件中增加如下配置:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>*.keystore</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <includes>
                <include>*.keystore</include>
            </includes>
        </resource>
    </resources>
</build>

测试功能

测试类:

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

@Slf4j
@RestController
@RequestMapping("/hello")
public class HelloController {

    @GetMapping("/info")
    public String info() {
        log.info("init info.."+new Date());
        return "success!!!";
    }
}

访问:https://127.0.0.1:443/hello/info

image-20211217152249160