Docker 部署 ApereoCAS 过程记录(采坑集锦)

编程入门 行业动态 更新时间:2024-10-09 20:23:08

Docker 部署 ApereoCAS 过程记录(采坑<a href=https://www.elefans.com/category/jswz/34/1769497.html style=集锦)"/>

Docker 部署 ApereoCAS 过程记录(采坑集锦)

一、获取docker镜像(以下所有命令都以本人部署服务时使用的为例)

docker pull apereo/cas

获取最新镜像,如果你有指定的版本,后面加上冒号版本号即可

二、初步运行服务

docker run -d  --name cas -p 8443:8443 -v /mydata/cas/config/cas.properties:/etc/cas/config/cas.properties  -p 8878:8080  apereo/cas

cas服务的配置文件在 /etc/cas/config/cas.properties ,此处将配置文件挂载到本地

的/mydata/cas/config/cas.properties 然后两个端口映射(8878我暂时没搞懂是干啥使的)

三、坐等服务运行报错

如果想看看报错信息,可以在执行完run命令后,执行下面的命令(cas是容器名,记得更换为自己的名字),来跟踪日志输出

docker attach cas

紧接着你刚开始看到的还算正常,紧接着,很炒蛋的stop!就出现了,这个沙比stop!我看了两天,关键报错信息如下:

Caused by: java.io.FileNotFoundException: /etc/cas/thekeystore (No such file or directory)at java.base/java.io.FileInputStream.open0(Native Method)at java.base/java.io.FileInputStream.open(Unknown Source)at java.base/java.io.FileInputStream.<init>(Unknown Source)at java.base/java.io.FileInputStream.<init>(Unknown Source)at java.base/sun.www.protocol.file.FileURLConnection.connect(Unknown Source)at java.base/sun.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)at org.apache.catalina.startup.CatalinaBaseConfigurationSource.getResource(CatalinaBaseConfigurationSource.java:121)at org.apache.tomcat.util.SSLUtilBase.getStore(SSLUtilBase.java:197)at org.apache.tomcat.util.SSLHostConfigCertificate.getCertificateKeystore(SSLHostConfigCertificate.java:207)at org.apache.tomcat.util.SSLUtilBase.getKeyManagers(SSLUtilBase.java:282)at org.apache.tomcat.util.SSLUtilBase.createSSLContext(SSLUtilBase.java:246)at org.apache.tomcat.util.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:97)

观察一下报错信息,我们不难发现,是缺少了某个文件导致的, 而这个文件,是秘钥文件,cas启动的时候会自动去/etc/cas/路径下找名为thekeystore(秘钥存储)的文件,找不到就报错了。知道错误原因,那我们下一步自然就是生成这个采坑无数的沙比文件

四、使用java提供的keytool命令生成秘钥文件

首先,在生成以前,需要注意一点,那就是这个秘钥文件要求特别严格,你需要先确定你的cas服务的jdk环境是多少,这个信息可以在每次run你的docker服务的log中看到,如下:

_    ____  _____ ____  _____ ___     ____    _    ____  / \  |  _ \| ____|  _ \| ____/ _ \   / ___|  / \  / ___| / _ \ | |_) |  _| | |_) |  _|| | | | | |     / _ \ \___ \ / ___ \|  __/| |___|  _ <| |__| |_| | | |___ / ___ \ ___) |/_/   \_\_|   |_____|_| \_\_____\___/   \____/_/   \_\____/ CAS Version: 6.4.0-RC1
CAS Branch: master
CAS Commit Id: a523ec42dc94497c91ef25ebd4c20f6d7b64fdba
CAS Build Date/Time: 2021-01-30T06:20:56Z
Spring Boot Version: 2.4.2
Spring Version: 5.3.3
Java Home: /opt/java/openjdk
Java Vendor: AdoptOpenJDK
Java Version: 11.0.10
JVM Free Memory: 132 MB
JVM Maximum Memory: 1 GB
JVM Total Memory: 262 MB
OS Architecture: amd64
OS Name: Linux
OS Version: 3.10.0-1160.76.1.el7.x86_64
OS Date/Time: 2023-03-12T15:02:01.641822
OS Temp Directory: /tmp
------------------------------------------------------------
Apache Tomcat Version: Apache Tomcat/9.0.41
------------------------------------------------------------

这是我启动时候看到的信息,可以看到java version 这一栏是11.0.10

得知cas的jdk环境后,你生成密钥文件所使用的jdk环境,需要与cas的一致,否则就会出现生成密钥文件后,拷贝到容器中,启动报错说秘钥文件格式不正确的错误,我百度了半天,才知道是因为jdk版本不对应。下面是报错信息

Caused by: java.io.IOException: Invalid keystore formatat java.base/sun.security.provider.JavaKeyStore.engineLoad(Unknown Source)at java.base/sun.security.util.KeyStoreDelegator.engineLoad(Unknown Source)at java.base/java.security.KeyStore.load(Unknown Source)at org.apache.tomcat.util.security.KeyStoreUtil.load(KeyStoreUtil.java:69)at org.apache.tomcat.util.SSLUtilBase.getStore(SSLUtilBase.java:216)at org.apache.tomcat.util.SSLHostConfigCertificate.getCertificateKeystore(SSLHostConfigCertificate.java:207)at org.apache.tomcat.util.SSLUtilBase.getKeyManagers(SSLUtilBase.java:282)at org.apache.tomcat.util.SSLUtilBase.createSSLContext(SSLUtilBase.java:246)at org.apache.tomcat.util.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:97)

所以需要先安装好jdk11.0.10(以我的为例),安装好后,执行下面的生成密钥的命令

keytool -genkey -alias youhoucas -keyalg RSA -validity 3650 -keystore ./thekeystore -keypass changeit -storepass changeit -dname "CN=cas.youhou,OU=youhou,O=youhou,L=TianJin,ST=TianJin,C=CN"

这里简单说明一下各个参数是什么作用,详细信息可自行百度

-genkey 生成密钥对

-alias 密钥条目别名

-keyalg 密钥算法

-validity 密钥有效时间

-keystore 密钥文件位置

-keypass 修改密钥条目的密码

-storepass 修改秘钥库的存储密码

-dname 指定证书拥有者信息

其中,最关键的就是keypass以及storepass这两个密码,开始我想用自定义的密码,但是cas服务默认会使用changeit作为密码(两个都是changeit),这就会导致用自己自定义的密码,就会导致cas无法使用此秘钥文件,因为它只会用煞笔changeit作为密码,我想改它的配置文件去修改这个默认值,它没有一个能用的密钥文件,服务都无法启动,导致最后我只能妥协,所以切记,密码开始最好使用changeit。

生成好密钥文件以后,我们需要重启cas服务,并在它再次报错关闭之前,执行docker cp命令,将刚刚生成的密钥文件拷贝到cas容器的/etc/cas/目录下,可以使用如下命令

docker restart cas && docker cp ./thekeystore cas:/etc/cas/thekeystore

拷贝好后,再次重启cas服务,即可看到Ready的图案~

更多推荐

Docker 部署 ApereoCAS 过程记录(采坑集锦)

本文发布于:2024-03-13 00:16:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1732752.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:集锦   过程   Docker   ApereoCAS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!