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

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 {

    @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.kler.cn/a/394708.html

相关文章:

  • 分布式专题(10)之ShardingSphere分库分表实战指南
  • Type-C单口便携显示器LDR6021
  • MySQL变量
  • C语言基础——指针(4)
  • 追风赶月莫停留,平芜尽处是春山—记一次备考经历(下)
  • 【ES6复习笔记】对象方法扩展(17)
  • 深入浅出C#编程语言
  • 深度学习模型评价指标介绍
  • Hive的数据导出
  • hadoop 3.x 伪分布式搭建
  • PTA部分题目C++重练
  • 浅谈C#之单线程流式适配器
  • 前端(1)——快速入门HTML
  • UI自动化测试|元素操作浏览器操作实践
  • 【开源免费】基于SpringBoot+Vue.JS课程答疑系统(JAVA毕业设计)
  • 黑马产品经理
  • 青少年编程与数学 02-003 Go语言网络编程 21课题、Go语言WebSocket编程
  • C#入门 020 事件(类型成员)
  • 膜计算 MATLAB例程(仅例程,无背景)
  • Linux 中自旋锁与信号量的区别
  • 网络初阶——运输层:TCP 协议(Part2)
  • docker构建jdk11
  • 拆解测试显示Mac Mini (2024)固态硬盘并未锁定 互换硬盘后仍可使用
  • Spring Data Redis常见操作总结
  • 深度学习之pytorch常见的学习率绘制
  • 【模块一】kubernetes容器编排进阶实战之etcd的介绍与使用