当前位置: 首页 > news >正文

spring boot整合https协议

整体目录

1. 生成SSL证书

首先,使用keytool生成一个自签名证书。打开命令行工具并运行以下命令:

keytool -genkeypair -alias myserver -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365

这将创建一个名为keystore.jks的文件,其中包含一个自签名的证书。你将被要求输入一些信息,如密码、名字等。

2. 配置Spring Boot应用以使用HTTPS

在你的Spring Boot项目中,将生成的keystore.jks文件放在src/main/resources目录下。然后,在application.properties文件中添加以下配置:

server.port=8443
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=your_keystore_password
server.ssl.key-password=your_key_password
server.ssl.key-store-type=JKS

请确保将your_keystore_passwordyour_key_password替换为你在生成密钥库时使用的密码。

server.port=8443
server.ssl.key-store=classpath:mykeystore.jks
#JKS类型-storepass参数值,P12和key password一样
server.ssl.key-store-password= changeit
server.ssl.key-password=test123456
#PKCS12 或者JKS
server.ssl.key-store-type=JKS
#server.ssl.key-store-type=PKCS12

3. 编写控制器

创建一个简单的REST控制器来测试HTTPS服务。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author: jg* @date: 2024-11-14* @description:*/
@RestController
@RequestMapping("/https")
public class HttpsController {@GetMappingpublic String test(){return "https 测试方法";}
}

4. 启动Spring Boot应用

确保你的Spring Boot主类位于正确的包结构中,并且包含@SpringBootApplication注解。例如:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @author: jg* @date: 2024-11-14* @description:*/
@SpringBootApplication
public class HttpsDemoApplication {public static void main(String[] args) {SpringApplication.run(HttpsDemoApplication.class,args);}
}

5.测试

postman

设置File->Settings

 

curl命令
 curl -k https://172.30.4.81:8443/https

keytool生成证书

PKCS12
1.生成一个新的私钥和证书请求 (CSR)

首先,你需要生成一个新的私钥和证书签名请求 (CSR)。

keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -validity 365 -keystore mykeystore.p12 -storetype PKCS12 -dname "CN=example.com, OU=IT, O=MyOrg, L=City, ST=State, C=Country" -ext SAN=dns:example.com,dns:www.example.com,ip:192.168.1.1

在这个命令中:

  • -alias myalias 指定别名。
  • -keyalg RSA 指定使用的算法。
  • -keysize 2048 指定密钥大小。
  • -validity 365 指定证书有效期为365天。
  • -keystore mykeystore.p12 指定密钥库文件名。
  • -storetype PKCS12 指定密钥库类型为 PKCS12。
  • -dname "CN=example.com, OU=IT, O=MyOrg, L=City, ST=State, C=Country" 指定证书的 Distinguished Name (DN)。
  • -ext SAN=dns:example.com,dns:www.example.com 添加 SAN 扩展,包含多个域名。
2. 导入证书到密钥库

如果你已经有一个现有的证书,并且想要将其导入到新的 PKCS12 密钥库中,可以使用以下命令:

keytool -importcert -file mycertificate.crt -alias myalias -keystore mykeystore.p12 -storetype PKCS12

在这个命令中:

  • -file mycertificate.crt 指定要导入的证书文件。
  • -alias myalias 指定别名。
  • -keystore mykeystore.p12 指定密钥库文件名。
  • -storetype PKCS12 指定密钥库类型为 PKCS12。
3. 验证密钥库内容

你可以使用以下命令来查看密钥库中的条目,确保它们已正确导入:

 

keytool -list -v -keystore mykeystore.p12 -storetype PKCS12

这个命令会显示密钥库中的所有条目及其详细信息,包括 SAN 信息。

4. 配置 Spring Boot 使用 PKCS12 密钥库

在 Spring Boot 配置文件中,更新你的 SSL 配置以使用新的 PKCS12 密钥库:

application.properties

server.ssl.key-store=classpath:mykeystore.p12

server.ssl.key-store-password=yourpassword

server.ssl.key-alias=myalias

server.ssl.key-store-type=PKCS12

JKS

使用 keytool 生成证书的步骤如下:

  1. 生成密钥对和证书签名请求 (CSR)

    keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -keystore mykeystore.jks -validity 365 -storepass changeit

     如果需要设置SAN

keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -keystore mykeystore.jks -validity 365 -storepass changeit -dname "CN=example.com, OU=IT, O=MyOrg, L=City, ST=State, C=Country" -ext SAN=dns:example.com,dns:www.example.com,ip:192.168.1.1

 

keytool -genkeypair -alias mycert -keyalg RSA -keysize 2048 -validity 365 -dname "CN=172.30.4.81, OU=IT, O=MyOrg, L=City, ST=State, C=Country" -keystore keystore.jks -storepass changeit
  • -alias myalias 指定别名。
  • -keyalg RSA 指定使用的算法。
  • -keysize 2048 指定密钥大小。
  • -validity 365 指定证书有效期为365天。
  • -keystore mykeystore.jks 指定密钥库文件名。
  • -dname "CN=example.com, OU=IT, O=MyOrg, L=City, ST=State, C=Country" 指定证书的 Distinguished Name (DN)。
  • -ext SAN=dns:example.com,ip:192.168.1.1 添加 SAN 扩展,包含多个域名和一个 IP 地址。
  1. 导出证书

    keytool -exportcert -alias myalias -keystore mykeystore.jks -file mycert.cer -storepass changeit

  2.  将证书导入到目标服务器

    现在,将生成的证书(mycert.crt)复制到172.30.4.83服务器上,并将其导入到目标服务器的密钥库中。

    scp mycert.crt user@172.30.4.83:/path/to/destination

在172.30.4.83服务器上执行以下命令:

keytool -importcert -alias mycert -file /path/to/destination/mycert.crt -keystore keystore.jks -storepass changeit

  1. 将证书导入到信任库(可选)

    keytool -importcert -file mycert.cer -keystore truststore.jks -alias myalias -storepass changeit -noprompt

  2. 验证密钥库

    keytool -list -v -keystore mykeystore.jks -storepass changeit

使用keytool将pkcs12文件导出crt证书

keytool -importkeystore -srckeystore yourfile.p12 -srcstoretype pkcs12 -destkeystore temp.jks -deststoretype jks

这里 yourfile.p12 是你的 p12 文件名,temp.jks 是临时生成的 JKS 文件名。

从 JKS 文件中导出证书

keytool -exportcert -alias <alias> -keystore temp.jks -rfc -file certificate.crt

这里 <alias> 是你在导入 p12 文件时使用的别名,temp.jks 是临时生成的 JKS 文件名,certificate.crt 是输出的 crt 文件名。

openssl将p12文件导出为crt文件
  1. 使用以下命令将p12文件转换为PEM格式的证书和私钥:

    openssl pkcs12 -in yourfile.p12 -out certificate.pem -clcerts -nokeys

    这里yourfile.p12是你的p12文件名,certificate.pem是输出的PEM格式证书文件名。

  2. 如果你只需要导出证书部分,可以使用以下命令从PEM文件中提取证书:

    openssl x509 -in certificate.pem -out certificate.crt

相关文章:

spring boot整合https协议

整体目录 1. 生成SSL证书 首先&#xff0c;使用keytool生成一个自签名证书。打开命令行工具并运行以下命令&#xff1a; keytool -genkeypair -alias myserver -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 这将创建一个名为keystore.jks的文件&#xf…...

服务器开机即占用大量内存,解决

1.服务器开机两分钟不到&#xff0c;内存使用飙升 [rootlocalhost ~]# top #查看是否有了明显的内存占用程序 2.上述未果&#xff0c;查看是否有违规的开机自启项 [rootlocalhost ~]# chkconfig --list 3.上述无果&#xff0c;查看开启启动加载项内容 上网搜后&#xff…...

Keil uvision的edition

0 Preface/Foreword 0.1 参考网址 https://zhuanlan.zhihu.com/p/456069876 1 Keil版本介绍 版本介绍&#xff1a; Keil Lite&#xff08;免费版&#xff09;&#xff1a;最多32KB代码&#xff0c;无法使用中间件Keil Essential&#xff08;基础版&#xff09;&#xff1a;没…...

[每周一更]-(第123期):模拟面试|消息队列面试思路解析

文章目录 22|消息队列:消息队列可以用来解决什么问题?1. 你用过消息队列吗?主要用来解决什么问题?异步、削峰和解耦你能各举一个例子吗?2. 你用的是哪个消息队列?为什么使用它而不用别的消息队列?3. 为什么你一定要用消息队列?不用行不行?不用有什么缺点?4. 在对接多…...

游戏引擎学习第12天

视频参考:https://www.bilibili.com/video/BV1yom9YnEWY 这节没讲什么东西&#xff0c;主要是改了一下音频的代码 后面有介绍一些alloc 和malloc,VirtualAlloc 的东西 _alloca 函数&#xff08;或 alloca&#xff09;分配的是栈内存&#xff0c;它的特点是&#xff1a; 生命周…...

深入理解Flutter生命周期函数之StatefulWidget(一)

目录 前言 1.为什么需要生命周期函数 2.开发过程中常用的生命周期函数 1.initState() 2.didChangeDependencies() 3.build() 4.didUpdateWidget() 5.setState() 6.deactivate() 7.dispose() 3.Flutter生命周期总结 1.调用顺序 2.函数调用时机以及主要作用 4.生…...

413: Quick Sort

解法&#xff1a; #include <bits/stdc.h> using namespace std; const int N1e55; int a[N]; int n;int main(int argc, char** argv) {cin>>n;for (int i0;i<n;i) cin>>a[i];sort(a,an);for (int i0;i<n;i) cout<<a[i]<<" "…...

vue之axios根据某个接口创建实例,并设置headers和超时时间,捕捉异常

import axiosNew from axios;//给axios起个别名//创建常量实例 const instanceNew axiosNew.create({//axios中请求配置有baseURL选项&#xff0c;表示请求URL的公共部分&#xff0c;url baseUrl requestUrlbaseURL: baseURL,//设置超时时间为20秒timeout: 20000,headers: {…...

Pandas数据透视表:交叉分析与聚合计算

大家好&#xff0c;在数据分析中&#xff0c;数据透视表&#xff08;Pivot Table&#xff09;是一种强大的工具&#xff0c;用于交叉分析和聚合计算。Pandas库中的数据透视表功能&#xff0c;使我们能够在多维数据中快速生成汇总表、统计特定维度的聚合数据&#xff0c;帮助揭示…...

软件设计师考试大纲

文章目录 一 、考 试 说 明1. 考试目标2. 考试要求3. 考试科目设置 二、考 试 范 围考试科目1:计算机与软件工程知识1. 计算机系统基础知识1.1计算机内数据的表示及运算1.2 其他数学基础知识1.3 计算机硬件基础知识1.3.1 计算机系统的组成、体系结构分类及特性1.3.2 存储系统1.…...

一文说清C++类型转换操作符(cast operator)

一 前言 大家在编程时&#xff0c;一定会遇到要做类型转换的应用场景。 但是&#xff0c;C风格的类型转换太强大&#xff0c;太危险&#xff0c;它允许将一个给定类型转换成我们想要的任何其他类型。 所以在C中&#xff0c;提供了一些更安全和更明确的类型转换操作符&#xff…...

MOSFET电路栅源极GS之间并联电容后,MOS炸管原因分析

1、前言 在介绍&#xff0c;在进行MOSFET相关的电路设计时&#xff0c;可能会遇到MOSFET误导通的问题&#xff0c;为了解决此问题&#xff0c;我们提出了两种方法&#xff0c;一种是增大MOSFET栅极串联电阻的阻值&#xff0c;另外一种是在MOSFET栅-源极之间并联一个电容&#…...

gitHub常用操作

gitHub常用操作 1、把项目拉下来2、添加上游仓库3、进入分支4、从上游仓库拉取更新 1、把项目拉下来 在对应项目的右上角点击fork&#xff0c;fork下来&#xff1a;将远程仓库复制到个人仓库 在创建好的分支文件夹下使用 git clone自己远程仓库下的http地址&#xff08;fork…...

[项目代码] YOLOv5 铁路工人安全帽安全背心识别 [目标检测]

YOLOv5是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv5具有更高的…...

Java 垃圾回收机制(GC)概览

简介 Java垃圾收集、堆和运行时编译器默认选择 jdk1.9开始&#xff0c;默认使用G1收集器&#xff0c;GC Threads的最大数量受堆大小和可用CPU资源限制初始堆大小为物理内存的1/64最大堆大小为物理内存的1/4分层编译器&#xff0c;同时使用C1和C2 JVM 垃圾收集器可以为配置优…...

Kafka节点服役和退役

1 服役新节点 1&#xff09;新节点准备 &#xff08;1&#xff09;关闭 bigdata03&#xff0c;进行一个快照&#xff0c;并右键执行克隆操作。 &#xff08;2&#xff09;开启 bigdata04&#xff0c;并修改 IP 地址。 vi /etc/sysconfig/network-scripts/ifcfg-ens33修改完…...

Git如何简单使用

文章目录 GitGitlabGitLab和GitHub有什么区别?Gitlab简单使用Gitlab常用指令Git Git是一个分布式版本控制系统。 它用于记录文件的修改历史,方便多人协作开发软件等项目。例如一个软件开发团队,成员们会频繁修改代码,Git可以追踪每个人的修改内容、时间等信息。 主要功能…...

酒水分销积分商城小程序开发方案php+uniapp

酒水分销积分商城小程序开发&#xff0c;开发语言后端php&#xff0c;前端uniapp。核心功能模块&#xff1a;酒水商城、积分商城、二级分销、抽奖、优惠券。可以二开或定制。协助部署搭建。...

MTU-内核态(数据链路层或网络接口上能够传输的最大数据包大小)

MTU&#xff08;最大传输单元&#xff0c;Maximum Transmission Unit&#xff09;是网络中用于表示数据链路层或网络接口上能够传输的最大数据包大小。 1. 工作原理 MTU 决定了一个数据包&#xff08;包括头部和数据部分&#xff09;的最大长度。它影响到数据的传输&#xff…...

React的基础API介绍(一)

目录 useEffect1. 替代生命周期方法2. 副作用管理3. 依赖项数组4. 多次使用5. 与闭包配合6. 支持异步操作7. 减少样板代码 注意事项useEffetct是如何拿到变量count最新的值&#xff1f;1. 每次渲染都会创建新的函数作用域2. 闭包捕获最新的状态值3. useEffect 的执行时机 useLa…...

【Electron】总结:如何创建Electron+Element Plus的项目

我将结合官网手册与AI问到的信息&#xff0c;直接给出步骤&#xff0c;与命令。 一、准备环境 首先在C盘Users&#xff0c;你的登录的账号名文件夹下&#xff0c;编辑.npmrc文件。添加镜像地址。 如果使用了yarn&#xff0c;则是.yarnrc。可以全部都配置。 npm install -g …...

从依托指标字典到 NoETL 自动化指标平台,指标口径一致性管理的进阶

今天&#xff0c;我们一起来梳理和盘点下不同代际指标平台如何实现指标口径一致性管理&#xff1a; 第一代&#xff1a;指标口径登记与管理 第一代指标平台聚焦于指标口径的登记与管理&#xff0c;依托指标字典实现企业指标口径的有效检索与管理功能。 此阶段&#xff0c;业…...

嵌入式面试题练习 - 2024/11/15

欢迎找我进行职业规划&#xff0c;超值的自我投资 -> 嵌入式软件工程师一对一指导 1.设有定义char *p[]{"Shanghai","Beijing","Honkong"};则结果为j字符的表达式是&#xff08;&#xff09; A *p[1] 3 B *(p[1] 3) C *(p[3] 1) D p[3] […...

分析http话术异常挂断原因

用户反馈在与机器人通话时&#xff0c;自己明明有说话&#xff0c;但是通话还是被挂断了&#xff0c;想知道原因。 分析日志 我们根据用户提供的freeswitch日志分析&#xff1a;发现是因为超时导致话术执行hangup动作&#xff0c;结束了通话。 从这一行向上分析日志&#xff…...

云岚到家 秒杀抢购

目录 秒杀抢购业务特点 常用技术方案 抢券 抢券界面 进行抢券 我的优惠券列表 活动查询 系统设计 活动查询分析 活动查询界面显示了哪些数据&#xff1f; 面向高并发如何提高活动查询性能&#xff1f; 如何保证缓存一致性&#xff1f; 数据流 Redis数据结构设计 如…...

【WPF】Prism库学习(一)

Prism介绍 1. Prism框架概述&#xff1a; Prism是一个用于构建松耦合、可维护和可测试的XAML应用程序的框架。它支持WPF、.NET MAUI、Uno Platform和Xamarin Forms等多个平台。对于每个平台&#xff0c;Prism都有单独的发布版本&#xff0c;并且它们在不同的时间线上独立开发。…...

0 -vscode搭建python环境教程参考(windows)

引用一篇非常详细的vscode搭建python环境教程 链接&#xff1a;vscode安装以及配置Python基本环境 以下是VSCode和PyCharm的对比 个人更建议使用VSCode Visual Studio Code (VSCode) Visual Studio Code 是由微软开发的一款免费、开源的轻量级代码编辑器。它支持多种编程语…...

Uniapp 引入 Android aar 包 和 Android 离线打包

需求&#xff1a; 原生安卓 apk 要求嵌入到 uniapp 中&#xff0c;并通过 uniapp 前端调起 app 的相关组件。 下面手把手教你&#xff0c;从 apk 到 aar&#xff0c;以及打包冲突到如何运行&#xff0c;期间我所遇到的问题都会 一 一 进行说明&#xff0c;相关版本以我文章内为…...

10款高效音频剪辑工具,让声音编辑更上一层楼。

音频剪辑在音频&#xff0c;视频&#xff0c;广告制作&#xff0c;游戏开发&#xff0c;广播等领域中都有广泛的应用。通过音频剪辑&#xff0c;创作者可以通将不同的音频片段进行剪切、拼接、混音等操作&#xff0c;创作出风格各异的音乐作品。如果你也正在为音频创作而努力的…...

Javascript——设计模式(一)

Javascript常见设计模式-CSDN博客 设计模式专栏内容总结-CSDN博客 C#编程思想——设计模式-CSDN博客 设计模式概述及其作用 设计模式&#xff08;Design Pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验的总结。使用设计模式的主要目的是为…...