博客专区 > 黄勇的博客 > 博客详情
安装 CAS 服务器
黄勇 发表于3年前
安装 CAS 服务器
  • 发表于 3年前
  • 阅读 15795
  • 收藏 193
  • 点赞 18
  • 评论 41

IBM Bluemix免费试用!>>>   

1 CAS 简介

CAS 全称为 Central Authentication Service(中央认证服务),它是耶鲁大学发起的一个开源项目,为 Web 应用系统提供一种可靠的单点登录方式,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目,它具有以下特点:

  • CAS 是一款开源的企业级单点登录解决方案,为应用系统提供中央认证服务。

  • CAS 服务器是独立部署的 Web 应用,可运行在主流的 Web 容器上,例如:Tomcat、Jetty 等。

  • CAS 客户端支持许多不同语言开发的应用系统,包括:Java、.Net、PHP、Apache、Perl、Ruby 等。

2 下载 CAS 服务器

可以从 CAS 官网:http://www.jasig.org/cas 下载,这可能需要翻墙,如果你不太愿意翻墙的话,可以访问这个地址:http://downloads.jasig.org/cas/同样可以下载。

  1. 下载 CAS 服务器最新版:cas-server-3.5.2-release.zip

  2. 解压程序包

  3. 复制 cas-server-3.5.2/modules/cas-server-webapp-3.5.2.war 到 Tomcat 的 webapps 目录下,并重命名为 ROOT.war。

在启动 Tomcat 之前,还需要做两件事情:

  1. 创建 CAS 密钥库

  2. 使 Tomcat 支持 HTTPS

3 创建密钥库

使用 JDK 的 keytool 命令生成密钥库(keystore),其实就是一份 keystore 文件,keystore 必须通过密码才能访问。

keystore 里包含了多个密钥对(keypair),每个 keypair 都有一个别名(alias),alias 必须保证唯一性,而且都有一个密码,有此可知,keystore 与 keypair 都有自己的密码。

JDK 也有自己的 keystore,位于 %JAVA_HOME%\jre\lib\security\cacerts,其密码就是 changeit,当然也可以通过 keytool 命令来修改。

我们首先生成 keypair 及其存放 keypair 的 keystore,然后从 keystore 里导出证书,最后将证书导入 JDK 的 keystore 里,Tomcat 在运行时就会自动读取 JDK 的 keystore,以确保所部署的应用可以享受 HTTPS 协议(SSL 通道)带来的安全性。

3.1 生成 keypair

使用以下命令生成密钥对:

keytool -genkeypair -alias cas -keyalg RSA -storepass changeit

默认情况下,生成的 keystore 就是用户目录下的 .keystore 文件。对于 Win8 而言,默认的用户目录为 C:\Users\ 用户名。

以上命令执行完毕后,会在用户目录下生成一份 .keystore 文件(如果以前不存在该文件的话),其中包括一个 keypair。

注意:

  1. 为了简化操作,建议 keystore 与 keypair 的密码相同,且均为 changeit。

  2. 提示“您的名字与姓氏是什么?”,这里需要输入一个域名,例如:www.xxx.com,本例中输入 cas 需要在 hosts 文件中做如下映射:

    127.0.0.1 cas

还有几条常用的 keytool 命令:

查看 keypair:

keytool -list -storepass changeit

删除 keypair:

keytool -delete -alias <别名> -storepass changeit

3.2 从 keystore 中导出证书

使用以下命令导出证书:

keytool -exportcert -alias cas -file cas.crt -storepass changeit

生成的证书文件为 cas.crt,位于运行该命令所在的当前目录下。

可双击该证书文件,将该证书安装到“受信任的根证书颁发机构”中,这样在浏览器中使用 HTTPS 协议访问时才不会出现一个红色的叉叉。

3.3 导入证书到 JVM 中

使用以下命令导入证书到 JVM 的 keystore 中:

keytool -importcert -alias cas -file cas.crt -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit -noprompt

默认情况下,Tomcat 将读取 JVM 中的密钥库,而不是用户目录下的 .keystore 密钥库,当然也可以配置 Tomcat 使其读取指定的密钥库。

注意:

  1. 在执行以上命令前,必须需要保证 cacerts 文件对当前用户有写权限。

  2. JDK 的 keystore 的密码必须为 changeit,这样 Tomcat 无需做任何配置就能访问。

4 使 Tomcat 支持 HTTPS

打开 Tomcat 的 conf/server.xml 文件。

修改以下配置:

...
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
...

将以上配置中的 SSLEngine 改为 off,默认为 on。

...
<!--<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="18443" />-->
...
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" />
...
<!--<Connector port="8009" protocol="AJP/1.3" redirectPort="18443" />-->
...

禁用 HTTP 8080 端口,开启 HTTPS 8443 端口,禁用 AJP 8009 端口,以确保只能通过 HTTPS 协议访问 CAS 服务器。

若将 HTTPS 端口号配置为 443,则可以使用无端口方式发送 HTTPS 请求。

5 运行 CAS 服务器

启动部署了 CAS 服务器的 Tomcat,并使用以下地址访问 CAS 登录页面:

https://cas:8443/login

一定要使用域名 cas 来访问,实际上 cas 指向了 127.0.0.1(需要在本机的 hosts 中进行配置)。

CAS 默认采用了最简单的认证,即用户名与密码必须有,但两者必须相同,也可对 CAS 做个性化认证配置。

可以使用如下 URL 注销 CAS:

https://cas:8443/logout


如何应用 CAS 实现单点登录?如何定制 CAS 的认证方式?如何将 CAS 集成到 Smart 框架中?下回分解!

标签: SSO CAS
共有 人打赏支持
黄勇
粉丝 5094
博文 114
码字总数 196347
作品 1
评论 (41)
nangua_99
文章不错,赞一个,但是博主,怎么去掉证书切换为http,是不是能详细讲讲啊?13
黄勇

引用来自“nangua_99”的评论

文章不错,赞一个,但是博主,怎么去掉证书切换为http,是不是能详细讲讲啊?13

去掉证书之后,访问 CAS 服务器就不安全了,达不到单点登录的效果,CAS 的官方是这样说的。
张露兵

引用来自“nangua_99”的评论

文章不错,赞一个,但是博主,怎么去掉证书切换为http,是不是能详细讲讲啊?13

修改源码可以达到目的,在源码里搜索“https”试试,应该可以找到修改地方,曾经尝试过的。
littleant
看到这个想起了以前折腾的遗留问题,楼主有没做过https双向认证下的cas登陆?

nice_so
个人觉得你写的是不是有点问题,那个密钥库是为https的,不是CAS的。曾经配过这个东西,所以知道点。
(当然如果我理解有误,还是希望楼主能够指出来)
lovit

引用来自“张露兵”的评论

引用来自“nangua_99”的评论

文章不错,赞一个,但是博主,怎么去掉证书切换为http,是不是能详细讲讲啊?13

修改源码可以达到目的,在源码里搜索“https”试试,应该可以找到修改地方,曾经尝试过的。

配置一下就行了,哪要修改什么源代码。
黄勇

引用来自“nice_so”的评论

个人觉得你写的是不是有点问题,那个密钥库是为https的,不是CAS的。曾经配过这个东西,所以知道点。
(当然如果我理解有误,还是希望楼主能够指出来)

密钥库是为了通过 HTTPS 来访问 CAS 服务器,我是这个意思。
人头马没面
要是讲一下cas的集群配置就太好了
Dead_knight

引用来自“lovit”的评论

引用来自“张露兵”的评论

引用来自“nangua_99”的评论

文章不错,赞一个,但是博主,怎么去掉证书切换为http,是不是能详细讲讲啊?13

修改源码可以达到目的,在源码里搜索“https”试试,应该可以找到修改地方,曾经尝试过的。

配置一下就行了,哪要修改什么源代码。

不需要修改源码。直接把https改成http就可以了,但是安全性不好。
Andyfoo
垃圾cas
东胜神洲
建议。。能不能在文章开始加上一句 CAS 服务器的简介(即用来干什么的)。。只是建议而已。。。
黄勇

引用来自“东胜神洲”的评论

建议。。能不能在文章开始加上一句 CAS 服务器的简介(即用来干什么的)。。只是建议而已。。。

非常好的建议!已补充。多谢!
黄勇

引用来自“Andyfoo”的评论

垃圾cas

请教为何觉得 CAS 不好呢?
黄勇

引用来自“人头马没面”的评论

要是讲一下cas的集群配置就太好了

有机会再与大家分享更多的 CAS 特性与细节。
黄勇

引用来自“littleant”的评论

看到这个想起了以前折腾的遗留问题,楼主有没做过https双向认证下的cas登陆?

目前还真没做过,有机会可以尝试一下,届时在于大家分享。
Andyfoo

引用来自“黄勇”的评论

引用来自“Andyfoo”的评论

垃圾cas

请教为何觉得 CAS 不好呢?

个性定制太复杂,程序太臃肿。服务器和客户端负载均衡不理想。
人头马没面

引用来自“Andyfoo”的评论

垃圾cas

如果不用cas的话 如何处理sso 求指教
人头马没面

引用来自“黄勇”的评论

引用来自“人头马没面”的评论

要是讲一下cas的集群配置就太好了

有机会再与大家分享更多的 CAS 特性与细节。

那就多谢了
人头马没面

引用来自“Andyfoo”的评论

引用来自“黄勇”的评论

引用来自“Andyfoo”的评论

垃圾cas

请教为何觉得 CAS 不好呢?

个性定制太复杂,程序太臃肿。服务器和客户端负载均衡不理想。

嗯 很有道理 我现在也正要用 确实如你所言 是否有替代方案?请教
大风厂老板蔡成功
用过就知道有多垃圾了
×
黄勇
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: