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://xiahunao.cn/news/3018710.html

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

相关文章

Windows Server 2019虚拟机安装

目录 第一步、准备工作 第二步、部署虚拟机 第三步、 Windows Server 2019系统启动配置 第一步、准备工作 下载Windows Server 2019系统镜像 官网下载地址:Windows Server 2019 | Microsoft Evaluation Center VMware Workstation 17下载地址: 链…

GoEdge自建CDN工具

GoEdge是一款管理分布式CDN边缘节点的开源工具软件,可以让用户轻松地、低成本地创建CDN/WAF等应用。同时提供免费版本和商业版本,本文基本免费版本安装测试。 GoEdgep安装涉及三部分: 边缘节点 - 接收和响应用户请求的终端节点 管理员系统 - …

使用脚本一键部署项目的示例(脚本会创建syetemctl的系统服务)

文章目录 说明使用脚本一键部署本项目开启/停止服务开启/关闭开机自动运行更新项目 参考地址:https://github.com/Evil0ctal/Douyin_TikTok_Download_API?tabreadme-ov-file 说明 后续相关项目可以使用这种方式创建脚本,脚本均放置在项目根目录下的bas…

基于STM32的智能垃圾桶设计(论文+源码)_kaic

基于STM32的智能垃圾桶设计 摘 要 随着社会科学技术的迅猛进展,人们的生活质量和速度也在不断提高。然而,大多数传统的家庭垃圾桶已经过时且缺乏创新,缺乏人性化设计。它们使用起来不方便、不卫生,所有的生活和废物垃圾都被混合…

目标检测——校园异常事件数据集

引言 亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 …

【网站项目】SpringBoot364考研信息查询系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

【WEEK11】 【DAY1】Employee Management System Part 2【English Version】

2024.5.6 Monday Continuing from 【WEEK10】 【DAY2】Employee Management System Part 1【English Version】 Contents 10.3. Page Internationalization10.3.1. Preparation10.3.2. Configuration File Writing10.3.2.1. Create an i18n (abbreviation for internationaliza…

(超简单)SpringBoot中简单用工厂模式来实现

简单讲述业务需求 业务需要根据不同的类型返回不同的用户列表,比如按角色查询用户列表、按机构查询用户列表,用户信息需要从数据库中查询,因为不同的类型查询的逻辑不相同,因此简单用工厂模式来设计一下; 首先新建一个…

【C++历练之路】红黑树——map与set的封装实现

W...Y的个人主页💕 gitee代码仓库分享😊 前言:上篇博客中,我们为了使二叉搜索树不会出现”一边倒“的情况,使用了AVL树对搜索树进行了处理,从而解决了数据在有序或者接近有序时出现的情况。但是AVL树还会…

创建Chrome插件:自动刷新网页

创建Chrome插件:自动刷新网页 前言 在日常工作和生活中,我们经常需要频繁刷新网页以获取最新的数据和信息。无论是开发人员进行网站测试,还是用户关注实时股市动态,手动刷新网页既耗时又低效。因此,本文将介绍如何创…

LeetCode--所有质数、质数对

1.0 Q: 输出 100 以内所有质数 1.1 /* 第一层循环控制检查到哪个数* 第二层通过遍历除以每个比他小的数的方式,检查每个数是不是质数* 由于要遍历检查,设置一个标记,只要任意一次循环可以整除,我们就设置该标记为不是质数 */boolean isPrime true;for (int i 2; i < 100…

RDB快照是怎么实现的?

RDB快照是怎么实现的&#xff1f; 前言快照怎么用&#xff1f;执行快照时&#xff0c;数据能被修改吗&#xff1f;RDB 和 AOF 合体 前言 虽说 Redis 是内存数据库&#xff0c;但是它为数据的持久化提供了两个技术。 分别是「 AOF 日志和 RDB 快照」。 这两种技术都会用各用一…

鸿蒙OpenHarmony南向:【Hi3516标准系统入门(IDE方式)】

Hi3516标准系统入门&#xff08;IDE方式&#xff09; 注意&#xff1a; 从3.2版本起&#xff0c;标准系统不再针对Hi3516DV300进行适配验证&#xff0c;建议您使用RK3568进行标准系统的设备开发。 如您仍然需要使用Hi3516DV300进行标准系统相关开发操作&#xff0c;则可能会出现…

【排序算法】之快速排序

一、算法介绍 快速排序(Quick sort)是由C.A.R.Hoare提出来的。快速排序法又叫分割交换排序法&#xff0c;是目前公认的最佳排序法&#xff0c;也是使用“分而治之”的方式&#xff0c;会先在数据中找到一个虚拟的中间值&#xff0c;并按此中间值将所有打算排序的数据分为两部分…

未来娱乐新地标?气膜球幕影院的多维体验—轻空间

在中国&#xff0c;一座独特的娱乐场所正在崭露头角&#xff1a;气膜球幕影院。这个融合了气膜建筑与激光投影技术的创新场所&#xff0c;不仅令人惊叹&#xff0c;更带来了前所未有的科幻娱乐体验。让我们一起探索这个未来的娱乐空间&#xff0c;感受其中的多维魅力。 现场演出…

java语言数据结构(单链表)

前言 不得承认java应用的广泛&#xff0c;所以毅然决定java版本的数据结构和算法专题还是要坚决更新。每日更新2题&#xff0c;希望学习的小伙伴可以关注一波跟上&#xff0c;评论区欢迎讨论交流。 实现原理 节点&#xff08;Node&#xff09;&#xff1a;链表的基本构建单元…

微信小程序(Taro)获取经纬度并转化为具体城市

1、获取经纬度 申请权限&#xff0c;想要使用微信小程序获取经纬度的方法是要申请该方面的权限。 获取经纬度的方法有很多选择其中一个使用就好。 我使用的是Taro.getFuzzyLocation(&#xff09; 在app.config.js中需要添加设置 requiredPrivateInfos: ["getFuzzyLocat…

Raft共识算法图二解释

下面是有关Raft协议中不同术语和概念的翻译及解释&#xff1a; 术语和概念&#xff1a; 任期号&#xff08;term number&#xff09;&#xff1a;用来区分不同的leader。前一个日志槽位的信息&#xff08;prelogIndex&#xff09;&#xff1a;这是前一个日志条目的索引&#…

集成逻辑分析器( ILA)IP核用法详解

集成逻辑分析器&#xff08;Integrated Logic Analyzer, ILA&#xff09;IP核是一个可定制的逻辑分析器&#xff0c;用于监测设计的内部信号。ILA核心包含了现代逻辑分析器的许多高级特性&#xff0c;比如布尔触发方程&#xff08;boolean trigger equations&#xff09;和边沿…

H5视频付费点播打赏影视系统程序全开源运营版

这是一款视频打赏源码&#xff0c;勿做非法用途&#xff0c;由用户亲测功能完善&#xff0c;源码仅用于学习使用&#xff0c;分享链接是用户云盘&#xff0c;具有时效性&#xff0c;感兴趣的可以去学习。 thinkphp开发&#xff0c;前后端分离设计&#xff0c;支持游客登陆、VIP…