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;
    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected 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;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式移植7Z解压缩(纯C)

本文分享一个纯C语言编写的7Z解压缩代码库,本代码库的主要目的是在嵌入式环境下使用7z解压缩文件,可以将升级包通过7z进行压缩,然后发送给设备,减小和设备传输过程中的文件大小,进而达到传输大文件的目的。 下载链接 …

2024年最佳音频处理软件盘点!助你事半功倍

在数字媒体时代,音频处理软件已经成为音乐制作、音频编辑和后期处理不可或缺的工具。这些软件具备强大的功能,能帮助用户轻松实现声音的剪辑、混音、特效处理以及音频格式转换等操作。本文将为你介绍音频处理软件的基本概念、功能特点以及常用软件&#…

【@ohos.events.emitter (Emitter)】

ohos.events.emitter (Emitter) 本模块提供了在同一进程不同线程间,或同一进程同一线程内,发送和处理事件的能力,包括持续订阅事件、单次订阅事件、取消订阅事件,以及发送事件到事件队列的能力。 说明: 本模块首批接…

实时Linux对EtherCAT工业自动化协议的支持

在自动化技术和工业控制领域,实时通信网络的重要性不断增长。EtherCAT(Ethernet for Control Automation Technology)作为一种高效的工业以太网通信协议,因其出色的性能和灵活性而广受欢迎。而实时Linux作为影响最为广泛的开源实时…

【Web前端】盒子模型_元素分类_表格

1、盒子模型 1.1简介 CSS盒子模型是在网页设计中经常用到的CSS技术所使用的一种思维模型。包括内容(content)、内边距(padding)、边框(border)、外边距(margin) 1.2边框(border) 1.2.1简介 边框是环绕内容区和填充的边界。边框的属性有border-style、…

Pytorch 实现情感分析

情感分析 情感分析是 NLP 一种应用场景,模型判断输入语句是积极的还是消极的,实际应用适用于评论、客服等多场景。情感分析通过 transformer 架构中的 encoder 层再加上情感分类层进行实现。 安装依赖 需要安装 Poytorch NLP 相关依赖 pip install t…

免费SSL证书?轻松申请攻略来了!

在当今的互联网时代,网络安全已经成为一个不容忽视的重要课题。随着在线交流和交易活动的增加,保护网站和用户信息的重要性日益突显。SSL证书,即安全套接字层证书,它为互联网通信提供了加密服务,确保数据的安全性和完整…

光伏远动通讯屏的组成

光伏远动通讯屏的组成 远动通讯屏主要用于电力系统数据采集与转发,远动通讯屏能够采集站内的各种数据,如模拟量、开关量和数字量等,并通过远动通讯规约将必要的数据上传至集控站或调度系统。这包括但不限于主变和输电线路的功率、电流、电压等…

怎么设置一天多个时间点的闹钟提醒?

在日常生活中,我们经常需要在一天的不同时间点完成特定的任务,如定时喝水、定时查看后台数据、定时吃药等。这时候,如果能有一款软件,可以在一条日程里轻松设置多个时间点的闹钟提醒,那将大大提高我们的工作效率和生活…

如何理解GTX接收通道相关模块?(高速收发器三)

前文讲解了GTX的时钟及发送通道相关内容,本文讲解GTX接收通道的一些功能及其IP配置,接收往往比发送设计更难,与调制解调,加密解密其实相差不大,后者难度都比前者高出很多。GTX的接收通道的功能相比发送通道更加重要&am…

西奥CHT-01软胶囊硬度测试仪:重塑行业标杆,引领硬度测试新纪元

西奥CHT-01软胶囊硬度测试仪:重塑行业标杆,引领硬度测试新纪元 在当今医药领域,软胶囊作为一种广泛应用的药品剂型,其品质的稳定性和安全性直接关系到患者的健康。而在确保软胶囊品质的各项指标中,硬度测试尤为关键。…

AIGC实战——多模态模型DALL.E 2

AIGC实战——多模态模型DALL.E 2 0. 前言1. 模型架构2. 文本编码器3. CLIP4. 先验模型4.1 自回归先验模型4.2 扩散先验模型 5. 解码器5.1 GLIDE5.2 上采样器 6. DALL.E 2 应用6.1 图像变体6.2 先验模型的重要性6.3 DALL.E 2 限制 小结系列链接 0. 前言 DALL.E 2 是 OpenAI 设计…

领域驱动设计架构演进

领域驱动设计由于其强调对领域的深入理解和关注业务价值,其架构演进依赖于领域的变化和特定领域中的技术实践。 初始阶段 一个单体架构,所有的功能都集成在一个应用程序中,领域模型可能还不完全清晰,甚至并未形成。这个阶段主要是为了验证产品的可行性,快速迭代并尽快推…

有没有国内个人可用的GPT平替?推荐5个AI工具

随着AI技术的快速发展,AI写作正成为创作的新风口。但是面对GPT-4这样的国际巨头,国内很多小伙伴往往望而却步,究其原因,就是它的使用门槛高,还有成本的考量。 不过,随着GPT技术的火热,国内也涌…

2023年度合肥市优秀知识产权服务机构评选申报主体条件、材料和时间程序须知

一、申报主体 在合肥市行政区域内登记注册的知识产权服务机构, 二、申报条件 (一)在合肥市登记注册时间满1年,营业执照经营范围包含知识产权代理、服务等相关内容; (二)在全国专利代理信息公示平台进行备案; (三)有稳定的专业服务人才队伍和服务对象…

【SSL证书】免费单域名SSL证书怎么申请

1、访问证书颁发机构(CA):比如JoySSL、ZeroSSL、各大云平台等,这些机构提供免费的SSL证书申请,并支持单域名证书。在网站上注册账号,并根据提示选择单域名证书进行申请。 !!&#xf…

工厂模式应用实例

引言 设计模式概念 设计模式(Design Pattern)的官方概念可以表述为:在软件设计中,设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它是针对特定问题或特定场景的解决方案,是一种经过…

使用STM32CubeMX进行STM32F4的定时器配置

目录 1. Pin脚2. 配置2.1 时钟配置2.2 RCC配置2.3 Timer配置2.4 输出文件 3. 代码3.1 使能定时器3.2 回调函数 1. Pin脚 2. 配置 2.1 时钟配置 timer3时钟挂载在APB1上: 时钟配置如下: 外部使用8MHz晶振 开启内部16MHz晶振 使用锁相环 开启最高100MHz。…

揭秘依赖注入:软件开发人员的基本指南

Dependency injection (DI) is a design pattern and programming technique to manage dependencies between different components. 依赖注入(DI)是一种用于管理不同组件之间依赖关系的设计模式和编程技术。 In DI, the dependencies of a class or ot…

机台统一管理有多困难?但现在出现可行的解决方案了

机台的统一管理对于企业来说对提高生产效率、降低成本、优化资源配置以及保障生产安全等方面都具有至关重要的作用。但企业机台统一管理却存在实际的困难,主要体现在: 多样化的设备和运作模式:由于机台设备可能来自不同的厂商,其规…