使用 `keytool` 生成 SSL 证书密钥库
使用 keytool 生成 SSL 证书密钥库:详细指南
在现代 Web 应用开发中,启用 HTTPS 是保护数据传输安全性和增强用户体验的重要步骤。对于基于 Java 的应用,如 Spring Boot 项目,keytool 是一个强大的工具,用于生成和管理 SSL/TLS 证书。本文将详细介绍如何使用 keytool 生成自签名证书,并将其应用于 Spring Boot 应用中以启用 HTTPS。
1. 什么是 Keytool?
Keytool 是 Java 开发工具包(JDK)自带的一个命令行工具,用于管理密钥库(Keystore)和信任库(Truststore)。密钥库包含私钥及其对应的证书,而信任库包含受信任的证书颁发机构(CA)的证书。通过 keytool,我们可以轻松生成自签名证书或导入第三方颁发的证书。
2. 生成自签名 SSL 证书
步骤 1:打开终端或命令行工具
确保 JDK 已安装,并将 keytool 添加到系统 PATH 中。您可以通过以下命令验证是否可以使用 keytool:
keytool -help
步骤 2:运行生成密钥对的命令
以下是生成自签名证书的典型命令:
keytool -genkeypair -alias myapp -keystore myapp.jks -storepass mypassword -validity 365 -keyalg RSA -keysize 2048
参数解释:
-genkeypair:生成密钥对(私钥和公钥)。-alias myapp:为证书指定一个别名,后续管理时会用到。-keystore myapp.jks:指定密钥库文件的名称。如果文件不存在,keytool会自动创建它。-storepass mypassword:设置密钥库的密码(请记住此密码)。-validity 365:证书的有效期(天数)。默认为 90 天,建议在生产环境中使用正式 CA 颁发的证书。-keyalg RSA:指定加密算法为 RSA。-keysize 2048:设置密钥长度为 2048 位。推荐使用 2048 位或更高。
步骤 3:填写用户信息
运行上述命令后,系统会提示您输入以下详细信息:
Enter keystore password: mypassword
Re-enter new password: mypassword
What is your first and last name?[Unknown]: John Doe
What is the name of your organizational unit?[Unknown]: IT Department
What is the name of your organization?[Unknown]: MyCompany Inc.
What is the name of your city or locality?[Unknown]: New York
What is the name of your state or province?[Unknown]: NY
What is the two-letter country code for this unit?[Unknown]: US
填写完成后,系统会生成一个自签名证书并将其存储在密钥库文件 myapp.jks 中。
3. 验证密钥库内容
为了确保证书已正确生成,可以使用以下命令查看密钥库的内容:
keytool -list -v -keystore myapp.jks -storepass mypassword
参数解释:
-list:列出密钥库中的所有条目。-v:以详细模式显示输出。
运行后,您将看到类似以下的输出:
Keystore type: JKS
Keystore provider: SUNEntry type: PrivateKeyEntry
Alias name: myapp
Creation date: Feb 1, 2024
Entry version: 3
Certificate:
Owner: CN=John Doe, OU=IT Department, O=MyCompany Inc., L=New York, ST=NY, C=US
Issuer: CN=John Doe, OU=IT Department, O=MyCompany Inc., L=New York, ST=NY, C=US
...
4. 导出证书(可选)
如果您需要将证书导出为文件,以便在其他系统中使用或共享,可以运行以下命令:
keytool -exportcert -alias myapp -keystore myapp.jks -storepass mypassword -file myapp.crt
参数解释:
-exportcert:导出证书。-alias myapp:指定要导出的证书别名。-file myapp.crt:输出文件的名称。
5. 在 Spring Boot 应用中启用 HTTPS
步骤 1:配置 application.properties
在 Spring Boot 项目中,添加以下配置以启用 HTTPS:
server.ssl.key-store=classpath:myapp.jks
server.ssl.key-store-password=mypassword
server.ssl.key-alias=myapp
说明:
server.ssl.key-store:指定密钥库文件的路径。server.ssl.key-store-password:密钥库的密码。server.ssl.key-alias:证书的别名。
步骤 2:将密钥库文件放入项目资源目录
确保 myapp.jks 文件位于项目的 src/main/resources 目录中,以便 Spring Boot 能够正确加载它。
步骤 3:重新启动应用
运行 mvn spring-boot:run 或直接启动主类。Spring Boot 将使用 SSL 证书监听 HTTPS 请求,默认端口为 8443。
6. 验证 HTTPS 配置
打开浏览器,访问:
https://localhost:8443
由于我们使用的是自签名证书,浏览器可能会显示安全警告。这是正常现象,因为自签名证书不受信任。在生产环境中,请替换为正式 CA 颁发的证书。
7. 注意事项
- 密钥库密码:请妥善保管密钥库密码,不要将其硬编码到代码中。
- 有效期:自签名证书的有效期有限,请定期更新或使用正式 CA 证书。
- 安全性:在生产环境中,建议配置 HTTPS 反向代理(如 Nginx 或 Apache)以增强安全性和性能。
总结
通过本文,您已经学习了如何使用 keytool 工具生成自签名 SSL 证书,并将其应用于 Spring Boot 应用中以启用 HTTPS。虽然自签名证书在开发和测试阶段非常有用,但在生产环境中请务必使用正式的 CA 颁发的证书以确保安全性和可信度。
相关文章:
使用 `keytool` 生成 SSL 证书密钥库
使用 keytool 生成 SSL 证书密钥库:详细指南 在现代 Web 应用开发中,启用 HTTPS 是保护数据传输安全性和增强用户体验的重要步骤。对于基于 Java 的应用,如 Spring Boot 项目,keytool 是一个强大的工具,用于生成和管理…...
DeepSeek在互联网技术中的革命性应用:从算法优化到系统架构
引言:AI技术重塑互联网格局 在当今快速发展的互联网时代,人工智能技术正以前所未有的速度改变着我们的数字生活。DeepSeek作为前沿的AI技术代表,正在多个互联网技术领域展现出强大的应用潜力。本文将深入探讨DeepSeek在搜索引擎优化、推荐系统、自然语言处理以及分布式系统…...
C++动态内存管理完全指南:从基础到现代最佳实践
一、动态内存基础原理 1.1 内存分配层次结构 内存类型生命周期分配方式典型使用场景静态存储区程序整个运行期编译器分配全局变量、静态变量栈内存函数作用域自动分配/释放局部变量堆内存手动控制new/malloc分配动态数据结构 1.2 基本内存操作函数 // C风格 void* malloc(s…...
交换机工作在OSI模型的哪一层?
交换机主要工作在OSI模型的第二层,即数据链路层链路层。在这个层次层次,交换机通过学习和维护MAC地址表来转发数据真帧疹,从而提高局域网内的数据传输效率。 工作原理: a、交换机根据MAC地址表来指导数据帧的转发。 b、每个端口…...
Redis客户端命令到服务器底层对象机制的完整流程?什么是Redis对象机制?为什么要有Redis对象机制?
Redis客户端命令到服务器底层对象机制的完整流程 客户端 → RESP协议封装 → TCP传输 → 服务器事件循环 → 协议解析 → 命令表查找 → 对象机制 → 动态编码 → 数据结构操作 → 响应编码 → 网络回传 Redis客户端命令到服务器底层对象机制的完整流程可分为协议封装、命令解…...
Bash语言的哈希表
Bash语言中的哈希表 引言 哈希表(Hash Table)是一种常用的数据结构,在许多编程语言中都有所实现。在 Bash 脚本中,虽然没有直接的哈希表类型,但我们可以利用关联数组(associative array)来实现…...
OpenCV--图像边缘检测
在计算机视觉和图像处理领域,边缘检测是极为关键的技术。边缘作为图像中像素值发生急剧变化的区域,承载了图像的重要结构信息,在物体识别、图像分割、目标跟踪等众多应用场景中发挥着核心作用。OpenCV 作为强大的计算机视觉库,提供…...
深度探索:策略学习与神经网络在强化学习中的应用
深度探索:策略学习与神经网络在强化学习中的应用 策略学习(Policy-Based Reinforcement Learning)一、策略函数1.1 策略函数输出的例子 二、使用神经网络来近似策略函数:Policy Network ,策略网络2.1 策略网络运行的例子2.2需要的几个概念2.3神经网络近似…...
ModuleNotFoundError: No module named ‘pandas‘
在使用Python绘制散点图表的时候,运行程序报错,如图: 报错显示Python 环境中可能没有安装 pandas 库,执行pip list命令查看,果然没有安装pandas 库,如图: 执行命令:python -m pip in…...
配环境的经验
pip install -e . 该命令用于以“编辑模式”(也称为开发模式)安装当前目录下的 Python 包,比如包含有 setup.py、setup.cfg 或 pyproject.toml 文件的项目-e 是 --editable 的简写。以编辑模式安装时,pip 会在你的 Python 环境中创…...
解决 Kubernetes 中容器 `CrashLoopBackOff` 问题的实战经验
在 Kubernetes 集群中,容器状态为 CrashLoopBackOff 通常意味着容器启动失败,并且 Kubernetes 正在不断尝试重启它。这种状态表明容器内可能存在严重错误,如应用异常、依赖服务不可用、配置错误等。本文将分享一次实际排障过程,并…...
hive/doris查询表的创建和更新时间
hive查询表的创建和更新时间: SELECT d.NAME AS database_name, t.TBL_NAME AS table_name, FROM_UNIXTIME(t.CREATE_TIME) AS create_time, FROM_UNIXTIME(tp.PARAM_VALUE) AS last_ddl_time FROM metastore.TBLS t JOIN metastore.DBS d ON t.DB_ID d.DB_ID JOIN…...
springboot中使用async实现异步编程
目录 1.说明 2.实现原理 3.示例 4.总结 1.说明 Async 是 Spring 框架提供的一个注解,用于标记方法为异步执行。被标记的方法将在调用时立即返回,而实际的方法执行将在单独的线程中进行。 Async 注解有一个可选属性:指定要使用的特定线程…...
【教程】MacBook 安装 VSCode 并连接远程服务器
目录 需求步骤问题处理 需求 在 Mac 上安装 VSCode,并连接跳板机和服务器。 步骤 Step1:从VSCode官网(https://code.visualstudio.com/download)下载安装包: Step2:下载完成之后,直接双击就能…...
初识 Three.js:开启你的 Web 3D 世界 ✨
3D 技术已经不再是游戏引擎的专属,随着浏览器技术的发展,我们完全可以在网页上实现令人惊艳的 3D 效果。而 Three.js,作为 WebGL 的封装库,让 Web 3D 的大门向更多开发者敞开了。 这是我开启这个 Three.js 专栏的第一篇文章&…...
基于大模型的病态窦房结综合征预测及治疗方案研究报告
目录 一、引言 1.1 研究背景与目的 1.2 研究意义 二、病态窦房结综合征概述 2.1 定义与病因 2.2 临床表现与分型 2.3 诊断方法 三、大模型在病态窦房结综合征预测中的应用 3.1 大模型介绍 3.2 数据收集与预处理 3.3 模型训练与优化 四、术前预测与准备 4.1 风险预…...
在 Ubuntu 下通过 Docker 部署 PSQL 服务器的详细技术博客
今天,需要部署一个密码管理器,突然要用到PSQL的服务器,所以就把部署的过程记录下来。 鉴于最近囊中羞涩,故此次部署实验使用三丰云的免费服务器配置,配置是为1 核 CPU、1G 内存和 5M 带宽,足够了。 以下是…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit(3)
1.问题描述: PC场景,青少年模式系统API不支持吗? 解决方案: PC场景,青少年模式系统API不支持,另外文档上的几个API也不支持。 2.问题描述: 华为一键登录 Beta7本地运行到手机可以拿到匿名手…...
地图与图层操作
地图文档本质上就是存储在磁盘上的地图,包括地理数据、图名、图例等一系列要素,当完成地图制作、图层要素标注及符号显示设置后,可以将其作为图层文件保存到磁盘中,在一个图层文件中,包括了定义如何在地图上描述地理数…...
starrocks split函数和trino split函数差异性
在trino419和starrocks3.2.8中分别执行下面这两条sql,出来的结果是不一样的 select split(,,,)[1] as t1 select coalesce(split(,,&#...
LeetCode算法题(Go语言实现)_33
题目 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 一、代码实现 func maxDepth(root *TreeNode) int {// 递归法(后序遍历)if root nil {return 0}leftDepth : maxDepth(r…...
go程序启动工具——cobra
以下是将“为什么很多 Go 程序启动都是用 Cobra”的内容转换为 Markdown 格式的文档: 为什么很多 Go 程序启动都是用 Cobra 在 Go 编程生态中,Cobra 是一个非常流行的命令行工具库,许多 Go 程序选择使用它来构建启动逻辑和命令行接口&#…...
Unet网络的Pytorch实现和matlab实现
文章目录 一、Unet网络简介1.1 输入图像1.2 编码器部分(Contracting Path)1.3 解码器部分(Expanding Path)1.4 最后一层(输出)1.5 跳跃连接(Skip Connections) 二、Unet网络的Pytorc…...
【合新通信】相控阵雷达RFoF方案的应用
一、相控阵雷达为何需要RFoF? 核心需求驱动 分布式部署:相控阵雷达(AESA/PESA)的T/R模块需分散布局(如舰载雷达阵面、卫星载荷),传统同轴电缆导致重量和损耗剧增。高频段挑战:X/Ku/…...
关于点卷积
🧠 什么是点卷积? 点卷积(Pointwise Convolution) 是一种特殊类型的卷积操作,其基本特点是卷积核的大小为 1 1 1 \times 1 11。与传统的卷积操作(如 3 3 3 \times 3 33 或 5 5 5 \times 5 55 卷积核…...
原理图输出网表及调入
一、输出网表操作步骤 (1)选中.dsn文件,选者N或进入tools下拉列表选择Creat Netlists (2)导出网表后的文件 二、网表的导入 (1)执行菜单命令“File-Import-Logic/netlist”,将原理…...
python基础12 模块/库的引用
在软件的设计中,经常提及到解耦的概念,即模块和模块之间的功能尽可能独立,减少不必要的关联。所以在实际项目中,我们经常会将一个工程拆解成很多不同的功能模块,以实现更优的设计并满足团队开发的要求。 有了模块的概…...
TDengine JAVA 语言连接器
简介 本节简介 TDengine 最重要且使用最多的连接器, 本节内容是以教科书式方式列出对外提供的接口及功能及使用过程中要注意的技术细节,大家可以收藏起来做为今后开发 TDengine 的参考资料。 taos-jdbcdriver 是 TDengine 的官方 Java 语言连接器,Java…...
【NLP 55、实践 ⑬ LoRA完成NER任务】
目录 一、数据文件 二、模型配置文件 config.py 三、数据加载文件 loader.py 1.导入文件和类的定义 2.初始化 3.数据加载方法 代码运行流程 4.文本编码 / 解码方法 ① encode_sentence(): ② decode(): 代码运行流程 ③ padding(): 代码…...
【蓝桥杯】Python大学A组第十五届省赛
1.填空题 1.1.拼正方形 问题描述 小蓝正在玩拼图游戏,他有个的方块和个的方块,他需要从中挑出一些来拼出一个正方形。 比如用个和个的方块可以拼出一个的正方形;用个的方块可以拼出一个的正方形。 请问小蓝能拼成的最大的正方形的边长为多少。 import math # 2*2的个数 a =…...
