iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >怎么用Spring Boot实现https ssl免密登录
  • 587
分享到

怎么用Spring Boot实现https ssl免密登录

2024-04-02 19:04:59 587人浏览 安东尼
摘要

本篇内容主要讲解“怎么用Spring Boot实现https ssl免密登录”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用spring Boot实现Htt

本篇内容主要讲解“怎么用Spring Boot实现https ssl免密登录”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用spring Boot实现Https ssl免密登录”吧!

创建服务端证书

为了开启 https ,我们需要一份证书。

实际开发中,会在网上申请一个机构颁发的证书。这里为了方便,我会使用 openssl 命令自己生成一个证书来使用。

openssl req -x509 -sha256 -days 3650 -newkey rsa:4096 -keyout rootCA.key -out rootCA.crt
怎么用Spring Boot实现https ssl免密登录

所有的密码都是 123456 ,然后根据提示输入相关信息就好,如果嫌麻烦也可以直接回车跳过。

这样我们就得到了证书 rootCA.crt 和私钥 rootCA.key 。

要在 Spring Boot 中实现服务器端 X.509 身份验证,还需要给我们的服务端也生成一个证书。

openssl req -new -newkey rsa:4096 -keyout localhost.key -out localhost.csr

同样,密码是 123456 ,文件名 localhost 可以自行修改。

接下来就是用 rootCA 给我们的服务端证书做签名了,在此之前,我们先写一个配置文件,里面写有一些基本的配置

  1. vi conf.config 


authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE subjectAltName = @alt_names [alt_names] DNS.1 = localhost

其中 DNS.1 的值就是你的域名,比如 www.segmentfault.com , localhost  等等。如果这里填错了,访问网站时,浏览器会提示网站不安全

然后给服务端证书签名,会提示你输入 rootCA 的密码

openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in localhost.csr -out localhost.crt -days 365 -CAcreateserial -extfile conf.config

成功后,让我们查看一下证书的信息

openssl x509 -in localhost.crt -text
怎么用Spring Boot实现https ssl免密登录

最后再将签名证书和私钥打包到 PKCS 文件中

openssl pkcs12 -export -out localhost.p12 -name "localhost" -inkey localhost.key -in localhost.crt

这条指令会要你先输入 localhost.key 的密码,然后再要你定义 localhost.p12 的密码。localhost.p12  这个密码一定要记住,因为在 Spring 的配置文件中有用到。

另外需要特别注意的是, Spring 配置文件中 server.ssl.keyAlias 的值,就是命令中的localhost(-name  "localhost") 。

Spring Boot开启https

把 localhost.p12 复制到 resources 目录下之后编译项目

怎么用Spring Boot实现https ssl免密登录

修改application.properties文件

server.port=8888 server.ssl.key-store=classpath:localhost.p12 server.ssl.key-store-passWord=123456 server.ssl.keyStoreType=PKCS12 server.ssl.keyAlias=localhost

在 chrome://settings/security 中,选择 受信任的根证书颁发机构 导入 rootCA.crt

怎么用Spring Boot实现https ssl免密登录

这时启动项目,就可以使用 https 访问网站了,而且浏览器提示网站时安全的。

怎么用Spring Boot实现https ssl免密登录

创建信托证书

信托证书中会存有 信任的外部实体的证书

这里我们只要将 rootCA.crt 添加进去就可以了

keytool -import -trustcacerts -noprompt -alias ca -ext san=dns:localhost,ip:127.0.0.1 -file rootCA.crt -keystore localhost.jks

然后将 localhost.jks 添加到项目中,并修改配置文件

怎么用Spring Boot实现https ssl免密登录

application.properties添加:

server.ssl.trust-store=classpath:localhost.jks server.ssl.trust-store-password=123456 server.ssl.client-auth=need

注意:此时由于添加了server.ssl.client-auth=need,因为没有添加个人证书,所以这个时候刷新页面,项目会无法访问,如果想要同时兼任普通登录,可以将need改成want,但是want只会在第一次访问页面时才会向客户索取个人证书

怎么用Spring Boot实现https ssl免密登录

创建客户端证书

现在创建一个客户端的证书,步骤和服务端的差不多一样。

openssl req -new -newkey rsa:4096 -nodes -keyout shurlORMes.key -out shurlormes.csr

怎么用Spring Boot实现https ssl免密登录

在生成客户端证书时,那些信息不建议跳过,因为在后续的步骤中,会获取其中的信息用以登录。比如我在 Common Name  处填写的信息,就是等下用来登录的用户名。

接下来用 RootCA 给客户端证书签名

openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in shurlormes.csr -out shurlormes.crt -days 365 -CAcreateserial

然后再将签名证书和私钥打包到 PKCS 文件中

openssl pkcs12 -export -out shurlormes.p12 -name "shurlormes" -inkey shurlormes.key -in shurlormes.crt

最后在 chrome://settings/security 选择 个人证书 把 shurlormes.p12 导入,期间会要你输入它的密码。

怎么用Spring Boot实现https ssl免密登录
怎么用Spring Boot实现https ssl免密登录
怎么用Spring Boot实现https ssl免密登录

这时候刷新页面,浏览器就会弹出一个对话框,让你选择个人认证了。

怎么用Spring Boot实现https ssl免密登录

Spring Boot获取个人证书信息

恭喜你,到了这一步, pki 登录已经完成了 99% 了。接下来就是通过 request 获取证书信息,然后处理字符串,拿到用户名做登录即可。

@RequestMapping("/login") public String login(HttpServletRequest request) {     X509Certificate[] certs = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");     if(certs != null) {         X509Certificate gaX509Cert = certs[0];         String dn = gaX509Cert.getSubjectDN().toString();         System.out.println("个人证书信息:" + dn);         String username = "";         String[] dnArray = dn.split(",");         for (String dnItem : dnArray) {             String[] dnInfo = dnItem.split("=");             String key = dnInfo[0];             String value = dnInfo[1];             if("cn".equalsIgnoreCase(key.trim())) {                 username = value;                 break;             }         }         System.out.println("用户名:" + username);          if(!StringUtils.isEmpty(username)) {             SecurityContext securityContext = SecurityContextHolder.getContext();             User userDetails = new User(username, "", Collections.EMPTY_LIST);             securityContext.setAuthentication(new UsernamePasswordAuthenticationToken(userDetails, "", Collections.EMPTY_LIST));             return "redirect:/";         }      }     return "login"; }

 怎么用Spring Boot实现https ssl免密登录

怎么用Spring Boot实现https ssl免密登录

Spring Boot 同时开启http和https

相信大家都发现了,现在项目只能通过 https 访问,如果用 http 访问浏览器直接返回 Bad request 了。

怎么用Spring Boot实现https ssl免密登录

要同时开启 https 和 http ,只需添加一个 TomcatConfig 就可以

@Configuration public class TomcatHttpConfig {     @Bean     public TomcatServletWEBServerFactory servletContainer() {         TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();         tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());         return tomcat;     }      private Connector initiateHttpConnector() {         Connector connector = new Connector("org.apache.coyote.http11.Http11NIOProtocol");         connector.setScheme("http");         connector.setPort(9999);         connector.setSecure(false);         return connector;     } }

这时候启动项目,注意看控制台打印的信息。

怎么用Spring Boot实现https ssl免密登录

说明已经成功启动 http 在端口 9999 , https 在 8888 ,页面也可以成功访问了。

怎么用Spring Boot实现https ssl免密登录

Spring Boot http自动跳转https

上面我们已经可以同时访问 htt p和 https ,但如果我要访问 http 的时候,自动跳转的https 呢?

只需要在上面的基础上稍微改改就可以了。

@Configuration public class TomcatHttpConfig {     @Bean     public TomcatServletWebServerFactory 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);             }         };         tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());         return tomcat;     }      private Connector initiateHttpConnector() {         Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");         connector.setScheme("http");         connector.setPort(9999);         connector.setSecure(false);         connector.setRedirectPort(8888);         return connector;     } }

到此,相信大家对“怎么用Spring Boot实现https ssl免密登录”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 怎么用Spring Boot实现https ssl免密登录

本文链接: https://www.lsjlt.com/news/81470.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用Spring Boot实现https ssl免密登录
    本篇内容主要讲解“怎么用Spring Boot实现https ssl免密登录”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Spring Boot实现htt...
    99+
    2024-04-02
  • Spring Boot怎么实现微信扫码登录功能
    本文小编为大家详细介绍“Spring Boot怎么实现微信扫码登录功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring Boot怎么实现微信扫码登录功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-06-30
  • Spring boot应用怎么支持https
    本篇文章为大家展示了Spring boot应用怎么支持https,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先使用命令行生成一个keystore文件:keytool -genkey -alias...
    99+
    2023-06-04
  • Spring Boot实现微信小程序登录
    使用Spring Boot完成微信小程序登录 由于微信最近的版本更新,wx.getUserInfo()的这个接口即将失效,将用wx.getUserProfile()替换,所以近期我也...
    99+
    2024-04-02
  • 怎么使用python+selenium实现扫码免密登录
    这篇文章主要介绍“怎么使用python+selenium实现扫码免密登录”,在日常操作中,相信很多人在怎么使用python+selenium实现扫码免密登录问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使...
    99+
    2023-07-02
  • 如何申请免费SSL证书以及实现HTTPS加密
    如何申请免费SSL证书以及实现HTTPS加密,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。每个互联网用户在访问网站时都会传输信息。这些信息通常很敏感,如付款详细...
    99+
    2023-06-04
  • CentOS中怎么实现双向免密码登录
    CentOS中怎么实现双向免密码登录,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。原理:(这里两台机器以主机1、主机2表示,这里两台机器是对等的)若主机1想要免...
    99+
    2023-06-10
  • Java Spring Boot实现简易扫码登录详解
    目录前言项目简介实现思路实现步骤1.用户访问网页端,选择扫码登录2.使用手机扫码,二维码状态改变3.手机确认登录效果演示总结前言 本文将介绍基于SpringBoot + Vue + ...
    99+
    2024-04-02
  • 怎么实现 Spring Boot 接口参数加密解密
    本篇内容主要讲解“怎么实现 Spring Boot 接口参数加密解密”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么实现 Spring Boot 接口参数加密解密”吧!加密解密本身并不是难事,...
    99+
    2023-06-17
  • Spring Security实现用户名密码登录详解
    目录环境用户名密码登录E-R图POM依赖配置文件MapperService设计HTMLController启动完整代码环境 JDK 1.8 Spring Boot 2.3.0.REL...
    99+
    2022-11-13
    Spring Security用户名密码登录 Spring Security 密码登录 Spring Security 登录
  • Spring Security如何实现用户名密码登录
    小编给大家分享一下Spring Security如何实现用户名密码登录,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!引言你在服务端的安全管理使用了 Sp...
    99+
    2023-06-21
  • spring-boot集成spring-security的oauth2如何实现github登录网站
    这篇文章主要为大家展示了“spring-boot集成spring-security的oauth2如何实现github登录网站”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“spring-boot集...
    99+
    2023-05-30
    spring boot oauth2.0
  • Linux小技巧实现免密码登录是怎么样的
    这篇文章将为大家详细讲解有关Linux小技巧实现免密码登录是怎么样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。导读我们的服务器一般都会部署在Linux上,当然你可能用的不同的开发版,大家...
    99+
    2023-06-05
  • php 怎么实现七天免登录
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php 怎么实现七天免登录?php中实现7天免登录功能,防止cookie欺骗1、免登录思路 用户选择七天免登录按钮,后端根据用户提交的用户名和密码查询到...
    99+
    2024-04-02
  • VSCode远程SSH免密登录配置实现
    最近更新了VS Code之后,发现Remote-ssh拓展里的端口转发功能没了,很伤心,在探索的同时,顺手配置了一下VS Code ssh免密登录,以省去每次连接远程文件夹时输入两次...
    99+
    2024-04-02
  • 怎么使用Nginx实现HTTPS和SSL证书配置
    要在Nginx上实现HTTPS和SSL证书配置,可以按照以下步骤进行: 生成SSL证书和私钥文件 首先,需要生成SSL证书和私钥...
    99+
    2024-04-09
    Nginx
  • Spring Boot实现登录验证码功能的案例详解
    目录验证码的作用案例要求前端页面准备准备login.html页面随机验证码工具类后端控制器验证码的作用 验证码的作用:可以有效防止其他人对某一个特定的注册用户用特定的程序暴力破解方式...
    99+
    2022-11-13
    springboot登录验证码 springboot验证码
  • Spring boot + mybatis + orcale怎么实现
    这篇文章给大家分享的是有关Spring boot + mybatis + orcale怎么实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。添加 mybatis 查询 orcale 数据库 新建几个必须的包, 结...
    99+
    2023-05-30
    springboot mybatis orcale
  • Spring Boot实现微信扫码登录功能流程分析
    目录1. 授权流程说明第一步:请求CODE第二步:通过code获取access_token第三步:通过access_token调用接口2. 授权流程代码3. 用户登录和登出4. Sp...
    99+
    2024-04-02
  • flask框架实现修改密码和免密登录功能
    目录修改密码功能免密登录修改密码功能 数据库部分: #重置密码 def reset_pass(phone,password): conn,cursor=get_conn(...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作