Apereo CAS 5.0开始使用spring boot的进行了全面的重构了,充分使用spring cloud的各个组件。如果是正在学习spring boot和spring cloud的话,这个项目本身就是一个非常好的例子。
要学习Apereo CAS的话,操作系统最好是linux,对于初学者可以节省很多时间。
环境:
CentOS7.3
Oracle JDK8
maven3.3.9
tomcat8.0.X(8.5.X相关配置变化较大,熟悉的也可以使用,Apereo CAS 5.x内置的tomcat版本也是8.5.X)
eclipse+gradle
编译安装
官方的编译安装文档如下
https://apereo.github.io/cas/5.0.x/installation/Maven-Overlay-Installation.html
上边的文档提供了gradle和maven两种方式的模板,按照文档中的步骤执行即可。
顺便提一下,overlay是maven-war-plugin的提供的一种机制,可以将两个Web应用的资源进行合并,相关的class都会被复制到WEB-INF/classes下面,相关的JSP等资源也合并到一起。
部署
CAS的部署需要很多信息安全方面的知识,证书、电子签名、对称非对称加解密等,当然啦,还有HTTPS相关的内容。
推荐下面三个链接的内容:
http://www.codeceo.com/article/https-worker.html
http://www.codeceo.com/article/https-certificate-generation.html
http://www.cnblogs.com/zery/p/5164795.html
从头到尾多看几遍基本上都清楚了。
准备一个域名
当然啦,不是真的准备一个域名,只是自己随便起一个名字,然后添加到各个需要访问CAS Server的操作系统的hosts文件就行了。本域名用于下面生成证书时,作为证书所有者姓名信息输入。同时在部署CAS时,还需要配置到CAS的配置文件中。参考:http://blog.csdn.net/xichenguan/article/details/60782179
证书
颁发证书(生成证书)
颁发证书分两步,第一步要创建一条证书记录,使用JDK创建一个证书记录的命令如下
keytool -genkey -alias tomcat -keypass changeit -keyalg RSA -keystore server.keystore
上边的命令,会创建一条证书记录,同时创建一个server.keystore的密钥库,同时将生成的证书记录写入server.keystore。keystore中的一条证书记录信息包含该条证书的私钥,公钥和对应的数字证书的信息。
第二步,导出数字证书
keytool -export -alias duke -keystore keystore -rfc -file testkey
数字证书包含三部分信息:证书元数据信息,序列号,过期时间等、所有者信息,姓名、地区等、所有者公钥;相比于在keystore中的信息,没有所有者的密钥,所有者的密钥只有所有者自己知道,而此处的数字证书是要分发到公网上的。
在tomcat所在的机器,将证书导入到cacerts
登录Tomcat所在的机器,切换到目录 ${JAVA_HOME}/jre/lib/security, 执行如下命令:
keytool -import -alias vbooking -keystore cacerts -file ${JAVA_HOME}/jre/lib/security/vbooking.cer
可使用如下命令查看证书信息:
keytool -list -keystore cacerts -alias vbooking
如果要更新证书,可以先删除原证书,再导入新证书:
cd ${JAVA_HOME}/jre/lib/security
keytool -delete -alias vbooking -keystore cacerts
keytool -import -alias vbooking -keystore cacerts -file ${JAVA_HOME}/jre/lib/security/vbooking.cer
keytool -list -keystore cacerts -alias vbooking
重启tomcat即可生效。
客户端浏览器需要导入证书到受信任的根目录证书
用浏览器访问网站,根据提示将导入证书到受信任的根目录证书。
数字证书的生成,分发,使用,可以放到三台机器上,A机器用于生成证书,作为CA,将A生成的数字证书导入B机器上的JRE,在B机器上的tomcat中配置(下面提到tomcat的HTTPS配置),在C机器上的浏览器访问B机器的tomcat,下载证书,将数字证书导入到本机的受信任的根目录证书。
Tomcat SSL
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true" maxHttpHeaderSize="8192"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/etc/cas/server.keystore"
truststoreFile="/opt/jdk1.8.0_121/jre/security/cacerts"
keystorePass="changeit"/>
将tomcat的https配置的注释放开,然后加上下面三个属性配置:
keystoreFile="/etc/cas/server.keystore"
truststoreFile="/opt/jdk1.8.0_121/jre/security/cacerts"
keystorePass="changeit"
重启tomcat就可以了。可以使用下面的链接测试一下:
https://localhost:8443/
部署
将cas.war放到tomcat里即可。