spring boot整合https协议

news2024/12/30 1:37:58

整体目录

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 {

    @GetMapping
    public 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2241365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ceph的集群管理

0 环境说明 ip地址主机名额外硬盘是否加入ceph集群10.0.0.141ceph141sdb 300G&#xff0c;sdc 500G是10.0.0.142ceph142sdb 300G&#xff0c;sdc 500G, sdd 1000G否10.0.0.143ceph143sdb 300G&#xff0c;sdc 500G否 在上一篇文章中&#xff0c;已经成功地初始化了一个ceph管…

C++(Qt)软件调试---内存泄漏分析工具MTuner (25)

C(Qt)软件调试—内存泄漏分析工具MTuner &#xff08;25&#xff09; 文章目录 C(Qt)软件调试---内存泄漏分析工具MTuner &#xff08;25&#xff09;[toc]1、概述&#x1f41c;2、下载MTuner&#x1fab2;3、使用MTuner分析qt程序内存泄漏&#x1f9a7;4、相关地址&#x1f41…

CCI3.0-HQ:用于预训练大型语言模型的高质量大规模中文数据集

摘要 我们介绍了 CCI3.0-HQ&#xff0c;它是中文语料库互联网 3.0&#xff08;CCI3.0&#xff09;的一个高质量500GB子集&#xff0c;采用新颖的两阶段混合过滤管道开发&#xff0c;显著提高了数据质量。为了评估其有效性&#xff0c;我们在不同数据集的100B tokens上从头开始…

LC12:双指针

文章目录 125. 验证回文串 本专栏记录以后刷题碰到的有关双指针的题目。 125. 验证回文串 题目链接&#xff1a;125. 验证回文串 这是一个简单题目&#xff0c;但条件判断自己写的时候写的过于繁杂。后面参考别人写的代码&#xff0c;首先先将字符串s利用s.toLowerCase()将其…

AI 写作(九)实战项目二:智能新闻报道(9/10)

一、项目概述 在当今信息爆炸的时代&#xff0c;新闻传播行业正面临着前所未有的挑战与机遇。随着科技的飞速发展&#xff0c;人们获取信息的渠道日益多样化&#xff0c;对新闻的时效性、准确性和个性化需求也不断提高。在这样的背景下&#xff0c;AI 写作在智能新闻报道中的重…

星际流浪的大模型

种子世界还在太空漫游&#xff0c;航线上捡到一个铁盒子&#xff0c;那是一块硬盘&#xff0c;古老的东西。 长老就安排歌者&#xff0c;你去研究&#xff0c;查查硬盘的来源坐标。 费好大劲&#xff0c;歌者把硬盘中的程序和数据激活&#xff0c;运行了起来。 很有意思&#x…

HarmonyOs DevEco Studio小技巧31--画布组件Canvas

那天我们用画布实现了文字颜色的渐变&#xff0c;实际上画布还有很多好玩的功能&#xff0c;接下来让我们一起试一下画布怎么玩 Canvas 提供画布组件&#xff0c;用于自定义绘制图形。 接口 Canvas Canvas(context?: CanvasRenderingContext2D | DrawingRenderingContext…

C语言.冒泡排序的练习

题目&#xff1a; 1.用C语言编程&#xff0c;用冒泡排序将一个元素个数为20&#xff0c;的一维数组&#xff0c;由大到小的降序。 分析&#xff1a;1.首先创建一个数组&#xff0c;元素个数为20. 2.其次是按降序排列。 3.最后用冒泡排序。 运行代码&#xff1a; #include&l…

RT-DETR融合GhostModel V3及相关改进思路

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《GhostNetV3: Exploring the Training Strategies for Compact Models》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/pdf/2404.11202v1 代码链接&#xff1a;https:…

基于yolov8、yolov5的鸟类分类系统(含UI界面、训练好的模型、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 &#xff0c; 直接提供最少两个训练好的模型。模型十分重要&#xff0c;因为有些同学的电脑没有 GPU&#xff0…

如何保证MySQL与Redis缓存的数据一致性?

文章目录 一、引言二、场景来源三、高并发解决方案1. 先更新缓存&#xff0c;再更新数据库2. 先更新数据库&#xff0c;再更新缓存3. 先删除缓存&#xff0c;再更新数据库4. 先更新数据库&#xff0c;再删除缓存小结 四、拓展方案1. 分布式锁与分布式事务2. 消息队列3. 监听bin…

Chromium 中sqlite数据库操作演示c++

本文主要演示sqlite数据库 增删改查创建数据库以及数据库表的基本操作&#xff0c;仅供学习参考。 一、sqlite数据库操作类封装&#xff1a; sql\database.h sql\database.cc // Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-sty…

pycharm分支提交操作

一、Pycharm拉取Git远程仓库代码 1、点击VCS > Get from Version Control 2、输入git的url&#xff0c;选择自己的项目路径 3、点击Clone&#xff0c;就拉取成功了 默认签出分支为main 选择develop签出即可进行开发工作 二、创建分支&#xff08;非必要可以不使用&#xf…

河道无人机雷达测流监测系统由哪几部分组成?

在现代水利管理中&#xff0c;河道无人机雷达监测系统正逐渐成为一种重要的工具&#xff0c;为河道的安全和管理提供了强大的技术支持。那么&#xff0c;这个先进的监测系统究竟由哪几部分组成呢&#xff1f; 河道无人机雷达监测系统工作原理 雷达传感器通过发射电磁波或激光束…

使用pycrawlers下载huggingface报错list index out of range问题解决

使用pycrawlers下载huggingface失败 错误&#xff1a;list index out of range 问题描述&#xff1a;当批量下载整个huggingface仓库的时候会报错&#xff0c;并且没有报错提示 分析&#xff1a;应该是哪个链接请求结果不存在数据 结果&#xff1a;当下载仓库存在文件夹下面只…

清华大学提出基于ESKF的松耦合里程计RINO:一种具有非迭代估计的精确、稳健的雷达惯性里程计

Abstract 精确的定位和建图对于实现自动驾驶车辆的自主导航至关重要。然而&#xff0c;当GNSS信号失效或在极端天气条件&#xff08;例如雾、雨和雪&#xff09;下&#xff0c;车体运动估计仍然面临重大挑战。近年来&#xff0c;扫描雷达因其较强的穿透能力成为一种有效的解决…

微信小程序之路由跳转传数据及接收

跳转并传id或者对象 1.home/index.wxml <!--点击goto方法 将spu_id传过去--> <view class"item" bind:tap"goto" data-id"{{item.spu_id}}"> 结果: 2.home/index.js goto(event){// 路由跳转页面,并把id传传过去//获取商品idlet i…

tensorflow案例6--基于VGG16的猫狗识别(准确率99.8%+),以及tqdm、train_on_batch的简介

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 本次还是学习API和如何搭建神经网络为主&#xff0c;这一次用VGG16去对猫狗分类&#xff0c;效果还是很好的&#xff0c;达到了99.8% 文章目录 1、tqdm…

海康大华宇视视频平台EasyCVR私有化视频平台服务器选购主要参数有哪些?

在构建现代服务器和视频监控系统时&#xff0c;选择合适的硬件配置和关键技术是确保系统性能和稳定性的基础。服务器选购涉及到多个关键参数&#xff0c;这些参数直接影响到服务器的处理能力、数据存储、网络通信等多个方面。 同时&#xff0c;随着视频监控技术的发展&#xf…

Redisson的可重入锁

初始状态&#xff1a; 表示系统或资源在没有线程持有锁的情况下的状态&#xff0c;任何线程都可以尝试获取锁。 线程 1 获得锁&#xff1a; 线程 1 首次获取了锁并进入受保护的代码区域。 线程 1 再次请求锁&#xff1a; 在持有锁的情况下&#xff0c;线程 1 再次请求锁&a…