01单点登录CAS 5.3.4搭建及使用
一.CAS介绍
单点登录Single Sign on (SSO),
CAS ( Central Authentication Service ),最初由耶鲁大学的Shawn Bayern 开发,后由Jasig社区维护,经过十多年发展,目前已成为影响最大、广泛使用的、基于Java实现的、开源SSO解决方案。cas旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )。 CAS 开始于 2001 年, 并在 2004 年 12 月正式成为 JA-SIG 的一个项目。
二.部署步骤
1.下载Tomcat8.5,官网下载地址
2.生成SSL证书
2.1 生成证书
#生成证书保存到D盘的keystore
keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass guangyuan -validity 365 -keystore D:\guangyuan.keystore -storepass guangyuan
#生成证书的时候,记住CAS服务器的域名必须保持一致
【说明】:-alias后面的别名可以自定义,
-keypass指定证书密钥库的密码,
-storepass和前面keypass密码相同,否则下面tomcat 配置https 会访问失败 -keystore指定证书的位置,这里指定放在d盘根目录,密钥库名称可以自定义,这里是guangyuan.keystore 命令输入完成,回车之后,会提示你输入一些资料,见下图:
【注意】:第一个让你输入的“您的名字与姓氏是什么”,请必须输入在C:\Windows\System32\drivers\etc\hosts文件中加入的服务端的域名。
我这里也就是server.guangyuanbj.com,为何这么做?
首先cas只能通过域名来访问,不能通过ip访问,同时上方是生成证书,所以要求比较严格,
所以如果不这么做的话,即使最终按照教程配置完成,cas也可以正常访问,访问一个客户端应用虽然能进入cas验证首页,但是,当输入信息正确后,cas在回调转入你想访问的客户端应用的时候,会出现No subject alternative names present错误异常信息,这个错误也就是在上面输入的第一个问题答案不是域名导致、或者与hosts文件配置的不一致导致。
生成的密钥文件如下:
2.2 导出证书
#导出证书tomcat.cer,证书生成在 D盘
keytool -export -alias ssodemo -keystore d:\guangyuan.keystore -file d:\ssodemo.crt -storepass guangyuan
【说明】:-alias后面的名称要与生成证书的命令里面的alias的名称一致. –keystore后面指定证书存放的位置,这里我放在D盘根目录,同时证书名称要与【生成证书】对应的命令里的keystore名称一致。这里是guangyuan.keystore,-file后面才crt路径,我也指定在d盘根目录。–storepass的证书密码要与上面输入的密码一致。
2.3 导入证书到JDK
#将证书导入到jdk的目录
keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file d:\ssodemo.crt -alias ssodemo
【说明】:-file指定证书的位置,也就是上一步导出证书的位置,即d:\ ssodemo.crt 命令中指定了JAVA_HOME,意思是将证书导入到客户端证书库,也就是jdk证书库中.因为客户端应用运行在本地,需要jdk的支持。
回车之后,会让你输入密钥库口令,注意,这里的密码必须要输入changeit,不能输入上面指定的密码zhoubang,切记,否则导入客户端证书会有问题,如果是多台机器演示,需要在每一台客户端导入该证书,步骤都是一样的。当看到提示“是否信任此证书”,输入y回车即可,见下图:(说明,命令中的-alias后面的别名可以自定义,如果出现【证书未导入,别名<***>已经存在】的错误,该意思是说客户端的密钥库中已经存在该别名证书了,重新指定其他别名即可.)
至此SSL证书已准备好
3.配置Tomcat SSL
<Connector SSLEnabled="true" clientAuth="false"
keystoreFile="${catalina.base}/cert/guangyuan.keystore"
keystorePass="guangyuan" maxThreads="150" port="8443"
protocol="org.apache.coyote.http11.Http11Protocol" scheme="https" secure="true"
sslProtocol="TLS" />
验证HTTPS配置
启动tomcat,浏览器访问 https://server.guangyuanbj.com:8443
3 编译生成car.war
3.1 下载
cas-overlay-template 5.3 下载地址
,下载解压后截图如下:
3.2 下载pom.xml的依赖包
#管网下载地址
https://oss.sonatype.org/content/repositories/releases/org/apereo/cas/cas-server-webapp-tomcat/
#安装war包到maven本地仓库
-Dfile 是需要上传到本地仓库的文件
mvn install:install-file
-Dfile=D:/00workspace/02Guangyuan/cas/cas-server-webapp-tomcat-5.3.5.war
-DgroupId=org.apereo.cas
-DartifactId=cas-server-webapp-tomcat
-Dversion=5.3.5
-Dpackaging=war
3.3 编译cas.war
3.4 验证cas.war
将cas.war在tomcat8.5.34下运行
http://server.guangyuanbj.com:8080/cas/login
https://server.guangyuanbj.com:8443/cas/login
默认账号:casuser 默认密码:Mellon 目前的配置仅有这一个用户。目前这个服务端只能看看,没什么实际用途。建议您将CAS连接到LDAP、JDBC等。
4.使用Overlay生成真正有用的服务端
什么是Overlay
overlay可以把多个项目war合并成为一个项目,并且如果项目存在同名文件,那么主项目中的文件将覆盖掉其他项目的同名文件。使用maven 的Overlay配置实现无侵入的改造cas。
4.1 新建maven空项目
将Tomcat下cas.war的pom.xml复制过来,删除无用的配置,见如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-base</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<properties>
<cas.version>5.3.4</cas.version>
<springboot.version>2.0.0.RELEASE</springboot.version>
<!-- app.server could be -jetty, -undertow, -tomcat, or blank if you plan to provide appserver -->
<app.server>-tomcat</app.server>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${springboot.version}</version>
<configuration>
<mainClass>org.springframework.boot.loader.WarLauncher</mainClass>
<addResources>true</addResources>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warName>cas</warName>
<failOnMissingWebXml>false</failOnMissingWebXml>
<recompressZippedFiles>false</recompressZippedFiles>
<archive>
<compress>false</compress>
<manifestFile>${project.build.directory}/war/work/org.apereo.cas/cas-server-webapp${app.server}/META-INF/MANIFEST.MF
</manifestFile>
</archive>
<overlays>
<overlay>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-webapp${app.server}</artifactId>
</overlay>
</overlays>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
</plugin>
</plugins>
<finalName>cas</finalName>
</build>
<dependencies>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-webapp${app.server}</artifactId>
<version>${cas.version}</version>
<type>war</type>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc-drivers</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
<!--<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-core-authentication</artifactId>
<version>4.2.7</version>
</dependency>-->
<!--<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-core-util</artifactId>
<version>${cas.version}</version>
</dependency>-->
</dependencies>
<repositories>
<repository>
<id>sonatype-releases</id>
<url>http://oss.sonatype.org/content/repositories/releases/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
<repository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</repository>
<repository>
<id>shibboleth-releases</id>
<url>https://build.shibboleth.net/nexus/content/repositories/releases</url>
</repository>
<repository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
</project>
复制配置文件application.properties、log4j2.xml、META-INF
修改配置项application.properties、log4j2.xml:
配置idea中启动tomcat war包:
配置tomcat启动:
至此跟之前直接部署cas.war是一样的。
TODO:需要配置JDBC,读取mysql中的账号密码,而不是写死的账号密码