Apereo CAS,是CAS协议official reference implementation
,也差不多是当前开源的SSO解决方案最好、最成熟的一个了。
当前版本是6.5,https://github.com/apereo/cas-overlay-template/tree/6.5。
本以为按照Apereo CAS的官方安装指南能够很容易把cas server在本地跑起来,但最后发现这个文档实操性略差。这里略过基础概念,直接记录一下本地运行的步骤。
没必要下载源码修改代码、配置然后build出自己的安装包,按照官方文档推荐直接使用“WAR Overlay Installation”的方式安装。
1)下载overlay框架代码,使用6.5分支代码。
代码语言:javascript复制git clone https://github.com/apereo/cas-overlay-template.git cas-server
git checkout -b 6.5 origin/6.5
Overlays这个方式是通过maven-war-plugin实现的:https://maven.apache.org/plugins/maven-war-plugin/overlays.html, gradle的实现:https://docs.freefair.io/gradle-plugins/current/reference/#_io_freefair_war_overlay 在这个cas项目里可参看 ./gradle/springboot.gradle 里bootWar部分。
2)gradle.perperties
这利用这个overlays项目运行CAS之前,可浏览一下gradle.properties文件定义的各个属性。其中, appServer 用于定义Apereo CAS server使用哪个内置server(Tomcat、Jetty…),如果只生成war部署到外部已存在的servlet contaier则无需定义此项。 certDir、serverKeyStore、exportedServerCert、storeType 这些选项用于定义https所用的证书。
3)gradle/tasks.gradle
./gradlew tasks
运行会显示可执行的tasks,其中一部分task被定义于 gradle/tasks.gradle 文件中。
CAS tasks
---------
casVersion - Display the current CAS version
copyCasConfiguration - Copy the CAS configuration from this project to /etc/cas/config
createKeystore - Create CAS keystore
createTheme - Create theme directory structure in the overlay
... ...
其中 createKeystore 用于生成https所用的证书。
代码语言:javascript复制sudo ./gradlew createKeystore
如果需要修改keystore的密码,可以执行:
代码语言:javascript复制keytool -storepasswd -keystore /etc/cas/thekeystore
生成https需要的PK和证书后,需要把CA导入到JDK的的ca根证书库中。
代码语言:javascript复制cd /etc/cas
sudo keytool -import -alias cas_cert -storepass changeit -file cas.crt -keystore /Library/Java/JavaVirtualMachines/temurin-11.jdk/Contents/Home/lib/security/cacerts
查看ca keystore
代码语言:javascript复制sudo keytools -list -storepass changeit -keystore /Library/Java/JavaVirtualMachines/temurin-11.jdk/Contents/Home/lib/security/cacerts
从ca keystore中删除cascert
代码语言:javascript复制sudo keytool -delete -alias cas_cert -keystore /Library/Java/JavaVirtualMachines/temurin-11.jdk/Contents/Home/lib/security/cacerts -storepass changeit
4)cas的配置文件
把项目中的 etc/cas/config 目录下的默认配置内容copy到 /etc/cas/config 中。可以手工copy文件,也可以通过gradle task, ./gradlew copyCasConfiguration
默认的内置的用户名密码是 casuser/Mellon,可以通过修改/etc/cas/config/cas.properties cas.authn.accept.users=casuser::password
进行定义。
配置登录用户在Apereo里属于CAS Authentication 的范畴。
5)Build and Run
代码语言:javascript复制./gradlew clean build
java -jar ./build/libs/cas.war
或者运行:
代码语言:javascript复制 ./gradlew clean copyCasConfiguration build run
在浏览器中访问 https://localhost:8443/cas 进入CAS系统。
6) 其它
如果在日志里发现提示The generated key MUST be added to CAS settings
, 则可按照提示把cas.tgc.crypto.encryption.key,cas.tgc.crypto.signing.key 加入到etc/cas/config/cas.properties 文件。
2022-08-29 23:29:34,160 WARN [org.apereo.cas.util.cipher.BaseStringCipherExecutor] - <Secret key for encryption is not defined for [Ticket-granting Cookie]; CAS will attempt to auto-generate the encryption key>
2022-08-29 23:29:34,168 WARN [org.apereo.cas.util.cipher.BaseStringCipherExecutor] - <Generated encryption key [rAHG_XeYnE-DbLtE77fngWAMtbB5lpIXYKbI_nSiD8I] of size [256] for [Ticket-granting Cookie]. The generated key MUST be added to CAS settings:
cas.tgc.crypto.encryption.key=rAHG_XeYnE-DbLtE77fngWAMtbB5lpIXYKbI_nSiD8I
>
2022-08-29 23:29:34,170 WARN [org.apereo.cas.util.cipher.BaseStringCipherExecutor] - <Secret key for signing is not defined for [Ticket-granting Cookie]. CAS will attempt to auto-generate the signing key>
2022-08-29 23:29:34,170 WARN [org.apereo.cas.util.cipher.BaseStringCipherExecutor] - <Generated signing key [cOlc7xQB5UJTwYrVmA30aQehEkxbSkcyHmE8vRkPHboRZkTn2rBJ8pUUPZfTJt7H8e3ecpitvuH2prrLxfIVxg] of size [512] for [Ticket-granting Cookie]. The generated key MUST be added to CAS settings:
cas.tgc.crypto.signing.key=cOlc7xQB5UJTwYrVmA30aQehEkxbSkcyHmE8vRkPHboRZkTn2rBJ8pUUPZfTJt7H8e3ecpitvuH2prrLxfIVxg
Reference: [1]: https://apereo.github.io/cas/6.5.x/index.html [2]: https://github.com/apereo/cas-overlay-template/tree/6.5 [3]: https://medium.com/swlh/install-cas-server-with-db-authentication-8ff52234f52