爆破专栏丨Spring Security系列教程之实现CAS单点登录-搭建CAS服务端_springboot + spring security + cas5

最后

码字不易,觉得有帮助的可以帮忙点个赞,让更多有需要的人看到

又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考

以下是部分内容截图
架构面试专题及架构学习笔记导图.png

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取


                    
                    
                        
                        **/services/*.json
                    
                
            


                org.apache.maven.plugins
                maven-compiler-plugin
                3.3
            
        
        cas
    


        
            sonatype-releases
            http://oss.sonatype.org/content/repositories/releases/
            
                false
            
            
                true
            
        
        
            sonatype-snapshots
            https://oss.sonatype.org/content/repositories/snapshots/
            
                true
            
            
                false
            
        
        
            shibboleth-releases
            https://build.shibboleth.net/nexus/content/repositories/releases
        
    


        
            
                true
            
            default
            
                
                    org.apereo.cas
                    cas-server-webapp a p p . s e r v e r < / a r t i f a c t I d >                      < v e r s i o n > {app.server}</artifactId>                     <version> app.server</artifactId>                    <version>{cas.version}
                    war
                    runtime
                
                
            
        


            
                false
            
            exec
            
                org.apereo.cas.web.CasWebApplication
                true
                
            
            
                
              
                
            
        


            
                false
            
            bootiful
            
                <app.server>-tomcat</app.server>
                false
            
            
                
                    org.apereo.cas
                    cas-server-webapp a p p . s e r v e r < / a r t i f a c t I d >                      < v e r s i o n > {app.server}</artifactId>                     <version> app.server</artifactId>                    <version>{cas.version}
                    war
                    runtime
                
            
        


            
                false
            
            pgp
            
                
                 
                
            
        
    

<?xml version="1.0" encoding="UTF-8"?>

4.0.0

org.apereo.cas
    cas-overlay
    war
    1.0


        <cas.version>5.3.16</cas.version>
        <springboot.version>1.5.18.RELEASE</springboot.version>
        
        <app.server>-tomcat</app.server>

org.springframework.boot.loader.WarLauncher
        false
         p r o j e c t . b u i l d . d i r e c t o r y / w a r / w o r k / o r g . a p e r e o . c a s / c a s − s e r v e r − w e b a p p {project.build.directory}/war/work/org.apereo.cas/cas-server-webapp project.build.directory/war/work/org.apereo.cas/casserverwebapp{app.server}/META-INF/MANIFEST.MF

<maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    


        
            
                com.rimerosolutions.maven.plugins
                wrapper-maven-plugin
                0.0.5
                
                    true
                    MD5
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                 s p r i n g b o o t . v e r s i o n < / v e r s i o n >                  < c o n f i g u r a t i o n >                      < m a i n C l a s s > {springboot.version}</version>                 <configuration>                     <mainClass> springboot.version</version>                <configuration>                    <mainClass>{mainClassName}
                    true
                    ${isExecutable}
                    WAR
                
                
                    
                        
                            repackage
                        
                    
                
            


                org.apache.maven.plugins
                maven-war-plugin
                2.6
                
                    cas
                    false
                    false
                    
                        false
                         m a n i f e s t F i l e T o U s e < / m a n i f e s t F i l e >                      < / a r c h i v e >                      < o v e r l a y s >                          < o v e r l a y >                              < g r o u p I d > o r g . a p e r e o . c a s < / g r o u p I d >                              < a r t i f a c t I d > c a s − s e r v e r − w e b a p p {manifestFileToUse}</manifestFile>                     </archive>                     <overlays>                         <overlay>                             <groupId>org.apereo.cas</groupId>                             <artifactId>cas-server-webapp manifestFileToUse</manifestFile>                    </archive>                    <overlays>                        <overlay>                            <groupId>org.apereo.cas</groupId>                            <artifactId>casserverwebapp{app.server}
                        
                    
                    
                        
                        **/services/*.json
                    
                
            


                org.apache.maven.plugins
                maven-compiler-plugin
                3.3
            
        
        cas
    


        
            sonatype-releases
            http://oss.sonatype.org/content/repositories/releases/
            
                false
            
            
                true
            
        
        
            sonatype-snapshots
            https://oss.sonatype.org/content/repositories/snapshots/
            
                true
            
            
                false
            
        
        
            shibboleth-releases
            https://build.shibboleth.net/nexus/content/repositories/releases
        
    


        
            
                true
            
            default
            
                
                    org.apereo.cas
                    cas-server-webapp a p p . s e r v e r < / a r t i f a c t I d >                      < v e r s i o n > {app.server}</artifactId>                     <version> app.server</artifactId>                    <version>{cas.version}
                    war
                    runtime
                
                
            
        


            
                false
            
            exec
            
                org.apereo.cas.web.CasWebApplication
                true
                
            
            
                
              
                
            
        


            
                false
            
            bootiful
            
                <app.server>-tomcat</app.server>
                false
            
            
                
                    org.apereo.cas
                    cas-server-webapp a p p . s e r v e r < / a r t i f a c t I d >                      < v e r s i o n > {app.server}</artifactId>                     <version> app.server</artifactId>                    <version>{cas.version}
                    war
                    runtime
                
            
        


            
                false
            
            pgp
            
                
              
                
            
        
    

```

你可以参考我的pom文件内容,因为每个人的网速不同,所以有可能你会在下载依赖时导致一些问题,别担心,下载失败时多次重试下载即可。

二. keytool密钥库工具

1. 概述

因为在CAS Server中默认使用的是HTTPS网络协议,对安全性要求较高,所以需要我们生成一个本地的密钥库,而这个密钥库,我们使用JDK中自带的Keytool证书管理工具就可以生成。

2. 证书及作用

在上一小节中,一一哥 就给大家提到了证书这个概念,所以我们先了解一下证书的概念及其作用。

在网络中,我们对数据进行签名(加密)是一种很常见的安全操作,一般签名有2种作用

  • 保证数据的完整性,证明数据在传输过程中没有被篡改;
  • 防止数据的发布者否认自己发布了数据。

在签名的时候,会用到非对称性加密算法和消息摘要算法。当我们对数据进行签名时,会先对这个数据进行消息摘要,通过摘要运算生成一个摘要信息,然后再对该摘要使用发布者的私钥进行加密。

比如支付宝支付时,需要先对订单数据进行签名,一般会将各支付参数和参数值拼接成一个字符串,这个组合的字符串也就相当于我们这里说的摘要,然后将摘要信息使用商户的私钥进行加密。

接收者(客户端)接受到加密数据后,会先使用发布者的公钥进行解密,得到原数据的摘要信息,再对接收到的数据计算摘要。如果两个摘要相同,则说明数据没有被篡改。同时,因为发布者的私钥是不公开的,只要接收者通过发布者的公钥能成功对数据进行解密,就说明该数据一定来源于该发布者。

那么怎么确定某公钥一定是属于某发布者呢?这就需要证书了。**证书是由权威认证机构颁发的,其内容包含证书拥有者的标识和它的公钥,并由权威认证机构使用它的私钥进行签名。**该证书由权威认证机构进行签名,认证机构也是通过发布它的证书来公开该机构的公钥,认证机构的证书由更权威的认证机构进行签名,这样就形成了证书链。证书链最顶端的证书称为根证书,根证书只有自签名

总之,要对网络上传播的内容进行签名和认证,就一定会用到证书。关于证书遵循的标准,最流行的是 X.509 标准规范。

3. Keytool简介

Keytool是JDK中自带的数据证书管理工具,这个工具一般存放在JDK的\jre\bin\目录下,利用Keytool可以生成我们需要的密钥和证书信息。这些生成的所有数字证书都是以一条一条(采用别名来区别)的形式存入证书库中,证书库中的每个证书都包含该条证书的私钥,公钥和对应的数字证书的信息。证书库中的每条证书都可以导出为数字证书文件,数字证书文件只包括主体信息和对应的公钥信息。

Keytool 会把 密钥(key) 和 证书(certificates) 存在于一个称为 keystore 的文件中,在keystore文件里,包含两种数据:

  • 密钥实体(Key entity)——私钥(secret key);
  • 可信任的证书实体(trusted certificate entries)——公钥。

4. Keytool常用命令

4.1 生成证书的命令

#命令实例
keytool -genkey -alias yyg -keyalg RSA -keystore D:/yyg.keystore -keypass 123456 -storepass 123456 -dname "CN=xingming,OU=danwei,O=zuzhi,L=shi,ST=sheng,C=CN" 

keytool -genkey -alias yyg -keyalg RSA -keysize 1024 -validity 365 -keystore D:/yyg.keystore -keypass 123456 -storepass 123456 -dname "CN=xingming,OU=danwei,O=zuzhi,L=shi,ST=sheng,C=CN"
  • genkey 生成秘钥库,默认会在用户的主目录中创建一个".keystore"文件,还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书信息;

  • alias 别名,每个keystore都关联一个独一无二的alias,alias通常不区分大小写,自己随便定义即可;

  • keyalg密钥算法,可选值为RSA和DSA(如果不指定默认采用DSA);

  • keysize 设置秘钥长度;

  • validity 设置密钥的有效期是多少天,默认为90天;

  • keystore 设置生成的秘钥库文件存储路径和名称;

  • keypass 设置秘钥口令;

  • storepass 秘钥库口令;

  • dname 拥有者信息,CN: 姓名;OU: 组织单位名称;O: 组织名称;L: 省/市/自治区名称;C: 国家/地区代码;

  • delete 删除密钥库中某条目;

  • import 将已签名数字证书导入密钥库。

4.2 查看genkey命令的参数说明

keytool -genkey -?

4.3 查看证书命令

keytool -list -keystore d:/yyg.keystore -storepass 123456

keytool -list -v -keystore d:/yyg.keystore -storepass 123456 keytool -list -rfc -keystore d:/yyg.keystore -storepass 123456
  • list 列出秘钥库中的条目,显示密钥库中的证书信息;
  • v 显示密钥库中证书的详细信息;
  • rfc 以RFC样式输出。

4.4 查看list命令的参数说明

keytool -list -?

4.5 导出证书到文件的命令

#该命令由客户端执行

keytool -export -alias yyg -keystore d:\yyg.keystore -file d:\mycerts.cer -storepass 123456

4.6 导入证书到密钥库的命令

keytool -import -trustcacerts -alias yyg -keystore "%JAVA_HOME%/jre/lib/security/cacerts " -file d:\mycerts.cer -storepass 123456

4.7 列出可用证书的命令

我们通过上面的命令,生成的证书可以交付客户端用户使用,用以进行SSL通讯,或者伴随电子签名的jar包进行发布者的身份认证。如果在使用证书时出现了异常:“未找到可信任的证书”,这个主要原因为在客户端未将服务器下发的证书导入到JVM中,可以用如下命令查看:

keytool -list -alias yyg -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass 123456

**注意:**如果keytool生成根证书时出现如下错误

java.io.IOException:keystore was tampered with,or password was incorrect

产生该问题的原因,可能是因为我们用户的home目录下已经有.keystore存在,如果存在的话,我们就把该文件先删除掉,然后再执行生成命令或者删除"%JAVA_HOME%/jre/lib/security/cacerts后再执行。

4.8 删除证书的命令

要删除证书库里面的某个证书,可以使用如下命令:

keytool -delete -alias yyg -keystore cacerts -storepass 123456

4.9 修改证书密码

keytool -keypasswd -alias yyg -keypass 123456 -new 654321 -keystore yyg.keystore -storepass 123456

4.10 修改密钥库存储密码

keytool -storepasswd -new 654321 -keystore yyg.keystore -storepass 123456

4.11 修改密钥库别名

keytool -changealias -keystore mykeystore.keystore -alias 当前别名 -destalias 新别名

三. 生成CAS Server密钥库

1. 生成casserver密钥库

在上一章节中,我给大家介绍了Keytool工具的使用,接下来我们利用这个Keytool工具,来生成针对CAS Server项目的密钥库文件。

我们可以先在E盘里创建一个keystore文件夹,用于存放我们接下来要生成的密钥库文件,然后执行如下命令。

keytool -genkey -alias casserver -keyalg RSA -keystore E:\keystore\yyg.keystore

命令执行过程效果如下图:

图片

**注意:****在“您的名字与姓氏是什么?”选项里,我们应当填写为CAS Server的域名,否则在后面进行单点登录的过程中会遇到问题。**当然如果是仅在本地进行开发测试,则域名可以随便填写,并通过配置hosts文件的方式使其生效。剩余的参数则直接回车一路默认跳过即可。

然后我们去E盘下可以看到,产生了一个名为yyg.keystore的密钥库文件。

图片

2. 导出证书

在真实开发时,CAS Server是支持HTTPS协议的,但在进行本地开发时,我们自制的证书会影响开发测试。因为HTTPS通信协议需要考虑SSL证书的问题,本地开发时可能会产生ssl.SSLHandshakeException异常,所以我们在本地开发时需要解决这个问题。

这里我们需要把自己生成的证书导入到JDK中,而在JDK中自带了一个证书库,JDK8及以前的版本中,该证书库位于"%JAVAHOME%/ jre/lib/security/cacerts"中;JDK9以后,取消了jre目录,证书位于"%JAVAHOME%/lib/security/cacerts"中。

接下来我们先将前面制作的密钥库导出证书,并将其导入到cacerts中即可。

keytool -export -trustcacerts -alias casserver -file E:\keystore\cas.cer -keystore E:\keystore\yyg.keystore

执行上面命令时,可以看到如下效果:

图片

最后

最后,强调几点:

  • 1. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;
  • 2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
  • 3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;

  • 3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

[外链图片转存中…(img-1xQcw0LL-1715692953460)]

[外链图片转存中…(img-Gv0utzUS-1715692953461)]

[外链图片转存中…(img-RyRFp2l2-1715692953461)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值