SpringBoot使用JKS或PKCS12证书实现https

SpringBoot使用JKS或PKCS12证书实现https

生成JKS类型的证书

可以利用jdk自带的keytool工具来生成证书文件,
默认生成的是JKS证书
cmd命令如下: 执行如下命令,并按提示填写证书内容,最后会生成server.keystore文件

keytool -genkey tomcat -keyalg RSA -keystore ./server.keystore

请添加图片描述

在springboot中配置这个JKS证书

需要在application.yml或application.properties配置文件里
配置server.ssl相关配置如下:

server:
  port: 443  #https默认访问端口
  servlet:
    context-path: /demo
    session:
      timeout: 30m  #默认会话过期时间30分钟
    encoding:
      enabled: true
      charset: UTF-8
      force: true
  tomcat:
    uri-encoding: UTF-8
  ssl:
    # 证书存放的位置
    key-store: 'classpath:server.keystore'
    # 证书别名
    key-alias: tomcat
    # 证书类型
    key-store-type: JKS
    # 证书密码
    key-store-password: 123456

生成PKCS12类型的证书

keytool工具可以将刚刚生成的JKS证书升级为PKCS12类型的证书,

PKCS12类型的证书是目前行业标准格式。

升级命令如下,执行该命令后会生把之前的证书重命名为server.old.keystore,然后生成新的证书文件server.keystore

keytool -importkeystore -srckeystore ./server.keystore -destkeystore ./server.keystore -deststoretype pkcs12

请添加图片描述

在springboot中配置PKCS12证书

需要在application.yml或application.properties配置文件里
配置server.ssl相关配置如下:

server:
  port: 443  #https默认访问端口
  servlet:
    context-path: /demo
    session:
      timeout: 30m  #默认会话过期时间30分钟
    encoding:
      enabled: true
      charset: UTF-8
      force: true
  tomcat:
    uri-encoding: UTF-8
  ssl:
    # 证书存放的位置
    key-store: 'classpath:server.keystore'
    # 证书别名
    key-alias: tomcat
    # 证书类型
    key-store-type: PKCS12
    # 证书密码
    key-store-password: 123456

配置tomcat连接器实现同时使用https和http访问

需要在springboot中新建一个配置类,配置tomcat里的http连接器

代码如下:


package cn.test;

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.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HttpConnectorConfig {


    /**
     * 配置http连接器
     * 当访问80端口时,自动重定向到443端口
     * 即访问http时,自动重定向到https端口
     * @return Connector
     */
    public Connector getHttpConnector(){
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setSecure(false);
        connector.setPort(80);
        connector.setRedirectPort(443);
        return connector;
    }

    @Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory(){
        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);
            }
        };
        tomcat.addAdditionalTomcatConnectors(getHttpConnector());
        return tomcat;
    }






}

以上操作配置完成后,启动springboot项目

可以观察到控制台已经启用了https和http这2种访问端口

[main] [] o.s.b.w.e.t.TomcatWebServer [TomcatWebServer.java : 220] Tomcat started on port(s): 443 (https) 80 (http) with context path '/demo'

打开浏览器测试

访问 http://localhost/demo/home

浏览器会重定向到 https://localhost/demo/home

请添加图片描述

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

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

相关文章

VMware Linux Centos 配置网络并设置为静态ip

在root用户下进行以下操作 1. 查看子网ip和网关 (1)进入虚拟网络编辑器 (2)进入NAT设置 (3)记录子网IP和子网掩码 2. 修改网络配置文件 (1)cd到网络配置文件路径下 [rootlo…

【element-ui】form表单初始化页面如何取消自动校验rules

问题描述:elementUI表单提交页面,初始化页面是获取接口数据,给form赋值,但是有时候这些会是空值情况,如果是空值,再给form表单赋值的话,页面初始化时候进行rules校验会不通过,此时前…

OpenMMLab MMDetectionV3.1.0-SAM(环境安装、模型测试、训练以及模型后处理工具)

OpenMMLab Playground 概况 当前通用目标检测的研究方向正在朝着大型多模态模型发展。除了图像输入之外,最近的研究成果还结合了文本模式来提高性能。添加文本模态后,通用检测算法的一些非常好的属性开始出现,例如: 可以利用大量…

在政策+市场双轮驱动下,深眸科技助力机器视觉行业走向成熟

近年来,随着人工智能发展的不断提速,机器视觉作为其重要的前沿分支,凭借着机器代替人眼来做测量和判断的能力,广泛应用于工业领域的制造生产环节,用来保证产品质量、控制生产流程、感知环境等,并迸发出强劲…

AI绘画| 迪士尼风格|可爱头像【附Midjourney提示词】

Midjourney案例分享 图片预览 迪士尼风格|可爱头像 高清原图及关键词Prompt已经放在文末网盘,需要的自取 在数字艺术的新时代,人工智能绘画已经迅速崭露头角。作为最先进的技术之一,AI绘画结合了艺术和科学,开启了一…

【工作】vant的search组件手动聚焦

背景 为了方便用户使用,第一次进来时默认输入框聚焦,但是当用户并没有输入手机号,点击按钮时,需要给一个友好提示,并且输入框重新聚集上。 过程 最开始以为search组件这个方法肯定已经实现了并且看官网文档上也有对…

redis的事务、redis持久化方案、Java操作redis数据库

五、redis的事务 开启事务: 要等左边的提交事务,右边才能拿到修改后的值 本来name不能增加,会报错,但是事务中没提交不知道错 此时提交数据: redis事务将成功的正常提交,失败的才回滚,所以不具备…

【计算机网络】11、网桥(bridge)、集线器(hub)、交换机(switch)、路由器(router)、网关(gateway)

文章目录 一、网桥(bridge)二、集线器(hub)三、交换机(switch)四、路由器(router)五、网关(gateway) 对于hub,一个包过来后,直接将包转发到其他口。 对于桥&…

边写代码边学习之卷积神经网络CNN

1. 卷积神经网络CNN 卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习神经网络的架构,主要用于图像识别、图像分类和计算机视觉等任务。它是由多层神经元组成的神经网络,其中包含卷积层、池化层和全连接…

HCIP——前期综合实验

前期综合实验 一、实验拓扑二、实验要求三、实验思路四、实验步骤1、配置接口IP地址2、交换机配置划分vlan10以及vlan203、总部分部,骨干网配置OSPF分部总部骨干网 4、配置BGP建立邻居关系总部骨干网分部 5、发布用户网段6、将下一跳改为本地7、允许AS重复8、重发布…

Java中集合容器详解:简单使用与案例分析

目录 一、概览 1.1 Collection 1. Set 2. List 3. Queue 1.2 Map 二、容器中的设计模式 迭代器模式 适配器模式 三、源码分析 ArrayList 1. 概览 2. 扩容 3. 删除元素 4. 序列化 5. Fail-Fast Vector 1. 同步 2. 扩容 3. 与 ArrayList 的比较 4. 替代方案…

C#——多线程之Thread

C#——多线程之Thread 前言一、Thread是什么?二、各应用场景以及实例分析1.前台线程和后台线程:2.异步处理3.线程状态及手动销毁线程4.线程同步/等待线程完成 总结 前言 上次简单讲述了关于多线程中Task的相关应用以及场景。今天我们来看一下多线程中Th…

【LeetCode】27. 移除元素

题目大概意思是剔除nums数组中出现的所有val值。可以用快慢双指针法来做。 快的指针在前面遍历找值不为val的元素的下标,慢的负责接收值不为val的元素,并及时更新数组。 class Solution {public int removeElement(int[] nums, int val) {//快慢指针法in…

单网卡实现 双IP 双网段(内外网)同时运行

前提是内外网是同一网线连接(双网线双网卡的具体可以自己搜索下。理论上都设置静态IP后把外网跃点设置小,内网跃点设置大,关闭自动跃点设置同一个接口跃点数,在通过命令提示符添加内网网址走内网网关就可以了)。 需要使…

华为OD机试真题 JavaScript 实现【机器人活动区域】【2023Q1 200分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、JavaScript算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试&am…

iOS--Runloop

Runloop概述 一般来说,一个线程一次只能执行一个任务,执行完成后线程就会退出。就比如之前学OC时使用的命令行程序,执行完程序就结束了。 而runloop目的就是使线程在执行完一次代码之后不会结束程序,而是使该线程处于一种休眠的状…

【iOS】GCD深入学习

关于GCD和队列的简单介绍请看:【iOS】GCD学习 本篇主要介绍GCD中的方法。 栅栏方法:dispatch_barrier_async 我们有时候需要异步执行两组操作,而且第一组操作执行完之后,才能开始执行第二组操作,当然操作组里也可以包含一个或者…

windows下安装anaconda、pycharm、cuda、cudnn、PyTorch-GPU版本

目录 一、anaconda安装及虚拟环境创建 1.anaconda的下载 2.Anaconda的安装 3.创建虚拟环境 3.1 环境启动 3.2 切换镜像源 3.3环境创建 3.4 激活环境 3.5删除环境 二、pycharm安装 1.pycharm下载 2.pycharm的安装 三、CUDA的安装 1.GPU版本和CUDA版本、cudnn版本、显卡…

Redis 客户端有哪些?

文章目录 JedisLettuceRedisson最佳实践 - 到底用哪个? Redis 最常见的 Java 客户端有两个,Jedis 和 Lettuce,高级客户端有 Redisson,见下图(图源 Clients | Redis) Jedis Github地址:redis/j…

JavaScript创建,写入,复制,读取文件 只限IE ActiveX控件

最近接到需求,需要纯前端, 操作写入改变文件,一时间头大不已,还好此需求只需要屏幕展示,无需顾及兼容问题,找来找去找到了new ActiveXObject(“Scripting.FileSystemObject”) 强大控件 以下为自己记录的 …