SpringBoot项目配置HTTPS接口的安全访问

参考:

https://blog.csdn.net/weixin_45355769/article/details/131727935

安装好openssl后,

创建 D:\certificate

CA文件夹下包含:

  • index.txt OpenSSL在创建自签证书时会向该文件里写下索引
  • database.txt OpenSSL会模拟数据库将一些敏感信息写在该文件里
  • serial 创建该文件后,请编辑在第一行写下 01 (注意,没有后缀)
  • newcerts 文件夹

注意: 这里提到的所有文件必须补齐,并且文件名不得更改 !
再注:在windows,没有openssl.conf默认文件夹的位置,所以需要自己配置环境变量。

1.3 生成自己的CA证书
首先,我们需要把自己先扮演成CA机构,根据非对称加密的概念,我们需要有一对密钥,对应一把公钥和一把私钥,私钥放在自己身边,公钥提供出去,这边需要注意的是不能把他看成是服务端,CA机构是在客户端和服务端两者之间的一个存在,这边理解了后,我们先来创建一把私钥,可以使用openssl来生成。

1.3.1 生成 rootca.key私钥文件

openssl genrsa -out rootca.key 4096

1.3.2 根据私钥文件生成req请求文件,req请求文件用来生成证书的时候使用

如果是自己使用,搭建着玩或者自己私人的网站,就使用openssl生成就好了。

1.3.3 生成X.509格式的CA根证书rootca.crt

openssl x509 -req -in rootca.csr -out rootca.crt -signkey rootca.key -days 36500

这个证书就是CA机构会预先在客户端中的受信任列表中埋下的根证书,其中包括了证书的所有者信息和公钥信息,有了这些信息,客户端就能通过这些信息来验证服务端返回的CA证书的合法性了。

mmc

1.4 CA机构给自己颁发证书:生成服务端证书
1.4.1 生成服务器私钥文件server1.key

openssl genrsa -des3 -out server1.key 4096

输入 PEM pass

1.4.2 创建请求文件,然后输入信息。

openssl req -new -key server1.key -out server1.csr

1.4.3 使用根证书签发证书

openssl x509 -req -in server1.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out server1.crt -days 36500

1.4.4 配置-extensions和-extfile扩展字段防止浏览器检查失败

ssl.conf

[req_ext]
subjectAltName = @alt_names

[alt_names]
IP.1    = 192.168.1.80
IP.2    = 127.0.0.1
IP.3    = 192.168.1.249
DNS.1   = localhost
#DNS.2   = localhost

配置片段是用于SSL证书配置中的一个部分,它通常用于定义subjectAltName扩展项的值。这部分内容通常会包含在一个 OpenSSL 配置文件中,用于生成或签署证书请求(CSR)或直接生成自签名证书。

在这个例子中:

  • [req_ext] 部分指定了请求扩展(request extensions),这些是在证书请求中或最终证书里需要包含的额外属性。
  • subjectAltName = @alt_names 指示使用名为 alt_names 的替代名称集。@ 符号是用来引用一个之前定义的命名段,在这个情况下就是下面定义的 [alt_names]
  • [alt_names] 部分列出了具体的替代名称条目,包括IP地址和DNS名称。这允许证书被用于多个不同的主机名或IP地址,提高了灵活性。

具体来说,你配置了以下替代名称:

  • 三个IP地址:192.168.1.80、127.0.0.1、192.168.1.249
  • 一个DNS名称:localhost
  • 还有一个DNS.2被注释掉了,这意味着如果需要可以取消注释来包含另一个DNS名称。

此配置有助于确保生成的证书能够适用于列出的所有网络标识,无论是通过IP还是DNS访问。这对于那些需要在多个地址上验证服务身份的场景特别有用,比如配置HTTPS网站或安全的API服务等。


 

  1. 带上配置文件,执行签发命令

openssl x509 -req -in server1.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out server2.crt -days 36500 -extensions req_ext -extfile ssl.conf

创建完毕!

-----------------------------------------------------------------------------------------------

3. spring boot配置ssl证书实现https

2.1 配置证书

在java环境中用的证书形式有p12格式的,jks格式的,所以需要做转换,以p12为例

 openssl pkcs12 -export -clcerts -in server1.crt -inkey server1.key -out server2.p12

首先用命令查询一下别名:

keytool -list -v -keystore server2.p12

2.2 添加到springboot项目中

把server2.p12复制到spring boot的 src/main/resources/ 目录下,和application.yaml平级

2.3 配置文件


可以访问了。  

-----------------------------------------------------------------------------------------

将所有HTTP请求重定向到HTTPS

package com.zbIntel.integration.config;import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class HttpsConfig {@Value("${server.port}")private int httpsPort;@Value("${http.port}")private int httpPort;@Beanpublic ServletWebServerFactory servletContainer() {TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {@Overrideprotected void postProcessContext(Context context) {// 设置安全约束SecurityConstraint securityConstraint = new SecurityConstraint();securityConstraint.setUserConstraint("CONFIDENTIAL");// 创建安全集合SecurityCollection collection = new SecurityCollection();collection.addPattern("/*");// 添加安全集合到安全约束securityConstraint.addCollection(collection);// 添加安全约束到上下文context.addConstraint(securityConstraint);}};// 添加HTTP连接器tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());return tomcat;}// 初始化HTTP连接器private Connector initiateHttpConnector() {Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");connector.setScheme("http");connector.setPort(httpPort);connector.setSecure(false);connector.setRedirectPort(httpsPort);return connector;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MacOS快速安装FFmpeg,并使用FFmpeg转换视频

前言:目前正在接入flv视频流,但是没有一个合适的flv视频流地址。网上提供的flv也都不是H264AAC(一种视频和音频编解码器组合),所以想通过fmpeg来将flv文件转换为H264AAC。 一、MacOS环境 博主的MacOS环境(…

机器学习——4.案例: 简单线性回归求解

案例目的 寻找一个良好的函数表达式,该函数表达式能够很好的描述上面数据点的分布,即对上面数据点进行拟合。 求解逻辑步骤 使用Sklearn生成数据集定义线性模型定义损失函数定义优化器定义模型训练方法(正向传播、计算损失、反向传播、梯度清空&#…

vue3+elementPlus:el-input输入框设置数字小数点

<el-input-numberplaceholder"请输入"v-model.number"scope.row.threeValue"class"mx-4":step"0.001" //精度controls-position"right" //幅度/></template> 上一篇文章&#xff0c; vue3echarts&#xff1a;e…

三分钟了解计算机网络核心概念-数据链路层和物理层

计算机网络数据链路层和物理层 节点&#xff1a;一般指链路层协议中的设备。 链路&#xff1a;一般把沿着通信路径连接相邻节点的通信信道称为链路。 MAC 协议&#xff1a;媒体访问控制协议&#xff0c;它规定了帧在链路上传输的规则。 奇偶校验位&#xff1a;一种差错检测方…

淘宝扭蛋机小程序开发:转动幸运,开启无限惊喜

一、探索未知&#xff0c;开启全新扭蛋体验 淘宝扭蛋机小程序&#xff0c;为您带来一场前所未有的扭蛋盛宴。在这个充满神秘与乐趣的平台上&#xff0c;每一次点击都将引领您走进未知的宝藏世界&#xff0c;每一次旋转都可能揭示出意想不到的惊喜。 二、海量商品&#xff0c;…

一个好用的轮子——美丽“表哥”(prettytable)

原文链接&#xff1a;http://www.juzicode.com/python-note-prretytable 在编写命令行程序时如果要输出表格&#xff0c;使用print()函数时通常需要花费大量的精力用在空格符和tab制表符的排版上。 我们先来看个例子&#xff0c;有一个包含3个字段的表格&#xff0c;需要用pri…

面试分享——订单超30分钟未支付自动取消用什么实现?如何使用Redis实现延迟队列?

目录 1.订单超时未支付自动取消&#xff0c;这个你用什么方案实现&#xff1f; 2.如何使用Redis实现延迟队列 2.1实验步骤 2.2实现生产可用的延迟队列还需关注什么 3.总结 电商场景中的问题向来很受面试官的青睐&#xff0c;因为业务场景大家都相对更熟悉&#xff0c;相关…

正在载入qrc文件 指定的qrc文件无法找到。您想更新这个文件的位置么?

打开Qt的ui文件&#xff0c;弹出提示框 如果需要用到qrc文件&#xff0c;选择Yes&#xff0c;再选择qrc文件所在的位置&#xff1b;如果不需要qrc文件&#xff0c;可以选择No&#xff0c;然后用普通文本编辑器打开&#xff0c;将“ <resources> <include location&q…

Unity WebGL过曝问题的解决策略

文章目录 一些可能的解决策略1. **调整曝光设置**&#xff1a;2. **使用Lerp或其他颜色混合技巧**&#xff1a;3. **HDR与色调映射**&#xff1a;4. **检查光源强度和范围**&#xff1a;5. **材质和纹理设置**&#xff1a;6. **使用Platform-specific Settings**&#xff1a;7.…

Python检查代码质量库之flake8使用详解

概要 Flake8是一个流行的Python库,用于检查代码质量和风格一致性,它集成了PyFlakes、pep8、Ned Batchelder的McCabe script等工具。Flake8可以帮助开发者发现代码中的错误,保持代码风格的一致性,是每个Python开发者工具箱中的重要组成部分。 安装 安装Flake8非常简单,可…

C# 实现格式化文本导入到Excel

目录 需求 Excel 的文本文件导入功能 范例运行环境 配置Office DCOM 实现 组件库引入 OpenTextToExcelFile 代码 调用 小结 需求 在一些导入功能里&#xff0c;甲方经常会给我们一些格式化的文本&#xff0c;类似 CSV 那样的纯文本。比如有关质量监督的标准文件&…

ZooKeeper以及DolphinScheduler的用法

目录 一、ZooKeeper的介绍 数据模型 ​编辑 操作使用 ①登录客户端 ​编辑 ②可以查看下面节点有哪些 ③创建新的节点&#xff0c;并指定数据 ④查看节点内的数据 ⑤、删除节点及数据 特殊点&#xff1a; 运行机制&#xff1a; 二、DolphinScheduler的介绍 架构&#…

FreeBSD RISCV 在QEME中实践-网络配置

在前一篇文章中&#xff0c;我们一起进行了FreeBSD RISCV 在QEME中实践 现在&#xff0c;让我们配置好网络吧&#xff01; 先上结论&#xff1a;用默认配置启动即可&#xff0c;网络就加载好了&#xff0c;只是不能ping罢了。因为不能ping&#xff0c;以为网络没通&#xff0…

php使用服务器端和客户端加密狗环境部署及使用记录(服务器端windows环境下部署、linux环境宝塔面板部署、客户端部署加密狗)

php使用服务器端和客户端加密狗环境部署及使用记录 ViKey加密狗环境部署1.windows环境下部署开发文档验证代码提示Fatal error: Class COM not found in 2.linux环境下部署&#xff08;宝塔面板&#xff09;开发文档验证代码提示Fatal error: Uncaught Error: Call to undefine…

软胶囊弹性检测:确保药品质量与患者安全的关键步骤

软胶囊弹性检测&#xff1a;确保药品质量与患者安全的关键步骤 在医药领域&#xff0c;软胶囊作为一种常见的药物载体&#xff0c;其质量的优劣直接关系到药物的有效性和患者的安全。软胶囊的弹性作为其质量评估的重要指标之一&#xff0c;不仅影响其储存和运输的稳定性&#x…

校园论坛系统基于PHP的校园管理系统毕设校园好感度系统 校园文化建设系统APP小程序H5前后端源码交付支持二开,一次付款,终生使用

APP小程序H5前后端源码交付&#xff0c;支持二开&#xff0c;一次付款&#xff0c;终身使用&#xff0c;免费更新系统本身源码。 校园社交网络系统开发是一个复杂且综合性的项目&#xff0c;旨在为学生、教师和管理人员提供一个互动、分享和交流的平台。以下是一个关于校园社交…

C语言 联合和枚举

目录 1. 联合体1.1 联合体类型的声明1.2 联合体变量的创建1.3 联合体的特点1.4 联合体在内存中的存储1.5 联合体使用举例 2. 枚举类型2.1 枚举类型的声明2.2 枚举变量的创建和初始化2.3 枚举类型的大小2.4 枚举类型的优点 正文开始 上次我们通过《C语言 结构体详解》学习了结构…

在拥有多个同名称密码的ap环境中,如何连接到指定信道或mac的ap路由器?

在给客户做ESP32-C3入墙开关项目时&#xff0c;客户问&#xff1a;在拥有多个同名称密码的ap环境中&#xff0c;如何连接到指定信道或mac的ap路由器&#xff1f;针对这个问题&#xff0c;启明云端工程师给出下面解决方法。 1、将wifi_sta_config_t配置中的channel配置为该信道…

GZIP文件格式解析和Inflate静态Huffman解压缩

GZIP是封装了Deflate压缩的格式文件&#xff1b;Deflate使用了无压缩、HuffmanLZ77进行压缩&#xff1b;解压是Inflate&#xff0c;Huffman包括静态Huffman压缩和动态Huffman压缩两种模式。 Java语言实现了GZIP格式解析、Inflate的静态Huffman解压缩、CRC32校验 算法。 gzip文…

使用Maven对Java独立应用程序进行编译打包

一、 安装Maven 1.解压&#xff0c;移动安装包 sudo tar -zxf ~/apache-maven-3.9.6-bin.tar.gz -C /usr/local/ cd /usr/local/ sudo mv apache-maven-3.9.6/ ./maven-3.9.6 sudo chown -R qiangzi ./maven-3.9.6 二、Java应用程序代码 1.版本信息&#xff1a; Spark-2.1…