SpringBoot轻松搭建HTTPS

本文将采用图文实例的方式手把手教你怎样快速使用 Spring Boot 配置 HTTPS 协议,一学就会。

本文将介绍在 Spring Boot 中,怎样配置 HTTPS 协议。主要步骤如下:

(1)生成自签名证书,这里仅仅是为了测试使用,正式环境会购买有效的证书;

(2)创建一个简单的 Spring Boot Web 项目,开发一个简单的接口,方便后续测试;

(3)在 application.yml 文件中配置 https 协议;

生成自签名证书

直接使用 java 自带的 keytool 工具,可以在命令行输入如下命令:

keytool -?

查看 keytool 的帮助信息;如果提示 “'keytool' 不是内部或外部命令,也不是可运行的程序或批处理文件。”,则需要将 java 的 bin 目录添加到系统 path 环境变量中;如果 keytool 工具存在,则执行下面命令:

C:\> keytool -genkey -alias springboot -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore test.p12 -validity 3650
输入密钥库口令: /* 注意:这个口令需要记住,后续在SpringBoot中配置需要用到 */
再次输入新口令:
您的名字与姓氏是什么?
  [Unknown]:  hxstrive
您的组织单位名称是什么?
  [Unknown]:  hxstrive
您的组织名称是什么?
  [Unknown]:  hxstrive
您所在的城市或区域名称是什么?
  [Unknown]:  chengdu
您所在的省/市/自治区名称是什么?
  [Unknown]:  sichuan
该单位的双字母国家/地区代码是什么?
  [Unknown]:  cn
CN=hx, OU=hx, O=hx, L=chengdu, ST=sichuan, C=cn是否正确?
  [否]:  y

根据提示,完成上面信息的填写。你会发现在当前目录多了一个 test.p12 文件,将该文件拷贝到项目的 resources 目录就可以了。

keytool 工具部分参数说明:

  • -alias 指定证书别名,如:springboot

  • -storetype 指定密钥仓库类型,如:PKCS12

  • -keyalg 指定生成证书的算法,如:RSA

  • -keysize 指定证书大小,如:2048

  • -keystore 指定证书文件存储路径,如:test.p12

  • -validity 指定证书的有效期,如:3650

新建 Spring Boot Web 项目

怎样创建 Spring Boot 项目这里不再赘述,下面是项目的启动类(也只有这么一个类)。代码如下:

package com.huangx.springboot.springboot2_https;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;

@RestController
@SpringBootApplication
public class Springboot2HttpsApplication {

    public static void main(String[] args) {
        SpringApplication.run(Springboot2HttpsApplication.class, args);
    }

    // 定义一个接口,返回固定字符串和当前日期
    // 便于浏览器测试
    @GetMapping("/")
    public String index() {
        return "Index Home " + new Date().toString();
    }

}

配置 HTTPS

打开 application.yml 文件,添加如下配置信息:

server:
  port: 8080
  # SSL config
  ssl:
    # 这里配置我们证书的文件名,该证书位于 resources 目录下面
    key-store: test.p12
    # 生成证书的密钥库口令,见 “生成自签名证书”
    # 如果把 key-store-password 错误的写成了 key-password,则抛如下错误:
    #   java.io.IOException: failed to decrypt safe contents entry: 
    #   javax.crypto.BadPaddingException: Given final block not properly padded
    key-store-password: aaaaaa
    # 指定密钥仓库类型
    key-store-type: PKCS12
    # 指定密钥别名
    key-alias: springboot

如果你是 application.properties 属性配置文件,则添加如下配置信息:

server.port=8080
# SSL config
# 这里配置我们证书的文件名,该证书位于 resources 目录下面
server.ssl.key-store=test.p12
# 生成证书的密钥库口令,见 “生成自签名证书”
server.ssl.key-store-password=aaaaaa
# 指定密钥仓库类型
server.ssl.key-store-type=PKCS12
# 指定密钥别名
server.ssl.key-alias=springboot

运行&效果

完成上面配置后,运行 Spring Boot 程序。如果看见如下输出信息,则说明启动成功了:

2021-07-01 13:01:55.150  INFO 13036 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2021-07-01 13:01:55.696  INFO 13036 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (https) with context path ''
2021-07-01 13:01:55.710  INFO 13036 --- [  restartedMain] c.h.s.s.Springboot2HttpsApplication      : Started Springboot2HttpsApplication in 3.047 seconds (JVM running for 6.124)
2021-07-01 13:02:05.800  INFO 13036 --- [nio-8080-exec-6] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-07-01 13:02:05.801  INFO 13036 --- [nio-8080-exec-6] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-07-01 13:02:05.803  INFO 13036 --- [nio-8080-exec-6] o.s.web.servlet.DispatcherServlet        : Completed initialization in 2 ms

打开浏览器访问 “https://localhost:8080” 地址,效果如下图:

SpringBoot轻松搭建HTTPS

锲而舍之,朽木不折;锲而不舍,金石可镂。——《荀子·劝学》
0 不喜欢
说说我的看法 -
全部评论(
没有评论
目录
热门标签
热门文章
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号