cas实践应用

    技术2022-06-26  58

    keystool生成,导入: keytool -genkey -alias tomcat -keyalg RSA keytool -export -alias tomcat -file server.crt keytool -import -file server.crt -keystore %JAVA_HOME%/jre/lib/security/cacerts CAS配置详解 From OseWiki Jump to: navigation, search 1.下载cas-server和cas-client(可选,建议使用) http://www.ja-sig.org/downloads/cas/cas-server-3.0.zip http://www.yale.edu/tp/cas/cas-client-2.0.11.zip 2.将cas-server-3.0.zip解压,并将lib/cas.war拷贝到server1的webapps下 3.产生SERVER的证书 keytool -genkey -alias my-alias-name -keyalg RSA -keystore  keystore.keystore 首先在命令行中切换到 %java_home%/jre/lib/security目录 %java_home%/bin/keytool -genkey -alias tomcat -keyalg RSA 密码是:changeit 姓名是:localhost 其他随便写的 之后是  %java_home%/bin/keytool -export -alias tomcat -file server.crt (导出SERVER的证书,用来给所有需要用到的客户端导入) 和 %java_home%/bin/keytool -import -file server.crt -keystore % java_home%/jre/lib/security/cacerts  (在客户端的JVM里导入信任的SERVER的证书(根据情况有可能需要管理员权限) 4.在server1配置tomcat使用HTTPS $CATALINA_HOME/conf/server.xml里 <Connector port="8443"   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  enableLookups="false" disableUploadTimeout="true"  acceptCount="100" debug="0" scheme="https" secure="true"  clientAuth="false" sslProtocol="TLS"   keystoreFile="C:/Documents and Settings/new/keystore.keystore"   keystorePass="changeit" /> 5.在要使用CAS的客户端client1里设置(以servlets-examples这个APP为例),我们使用ServletFilter(CAS client里提供的)来实现SSO的检查。将cas-client-2.0.11/java/lib文件复制到%tomcat_home%/webapps/servlets- examples/WEB-INF/lib中(没有lib文件夹,自己建一个) 修改servlets-examples/WEB-INF/web.xml <filter>     <filter-name>CASFilter</filter-name>    <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>    <init-param>        <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>        <param-value>https://localhost:8443/cas/login</param-value>    </init-param>    <init-param>        <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>        <param-value>https://localhost:8443/cas/proxyValidate</param-value>    </init-param>    <init-param>        <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>        <param-value>localhost:8080</param-value>    </init-param>    </filter>    <filter-mapping>        <filter-name>CASFilter</filter-name>        <url-pattern>/servlet/*</url-pattern>    </filter-mapping> 6.将cas-client-2.0.11.zip解压,把java/lib/casclient.jar拷贝到client1服务器上的webapps/servlets-examples/WEB-INF/lib目录下(如果没有就建一个) 7.导出SERVER的证书,用来给所有需要用到的客户端导入 (在第三步生成这里重复一下)  keytool -export -file myserver.cert -alias my-alias-name -keystore keystore.keystore 8.test & done. 把server1和client1分别起来,检查启动的LOG是否正常,如果一切OK,就访问 http://client1:8080/servlets-examples/servlet/HelloWorldExample 系统会自动跳转到一个验证页面,随便输入一个相同的账号,密码,严正通过之后就会访问到真正的HelloWorldExample这个servlet了 取自"http://www.ose.com.cn/wiki/index.php?title=CAS配置详解" CAS介绍 From OseWiki Jump to: navigation, search CAS背景介绍 CAS(Central Authentication Service),是耶鲁大学开发的单点登录系统(SSO,single sign-on),应用广泛,具有独立于平台的,易于理解,支持代理功能。CAS系统在各个大学如耶鲁大学、加州大学、剑桥大学、香港科技大学等得到应用。 Spring Framework的Acegi安全系统支持CAS,并提供了易于使用的方案。Acegi 安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。 Acegi安全系统在国内外得到了广泛的应用,有着良好的社区环境。 CAS的设计目标 (1)为多个Web应用提供单点登录基础设施,同时可以为非Web应用但拥有Web前端的功能服务提供单点登录的功能; (2)简化应用认证用户身份的流程; (3)将用户身份认证集中于单一的Web应用,让用户简化他们的密码管理,从而提高安全性;而且,当应用需要修改身份验证的业务逻辑时,不需要到处修改代码。 CAS的实现原理 CAS(Central Authentication Server)被设计成一个独立的Web应用。实现原理非常简单,CAS Server2.0.12的实现只有30个类,除了JDK本身外,只使用到一个 servlet.jar包。它目前的实现是运行在HTTPS服务器的几个Java Servlet上(而客户端可以灵活采用http和https的方式)。通过CAS2.0.12认证的序列图如下图(因图片显示问题,暂时去除)。 CAS在应用中的运行硬件环境 University of Delaware: Sun Fire 280R/ 2x750 MHz/ 4 GB memory/ 550.3 GB disk storage University of Hawaii: a single Sun Netra X1 (UltraSPARC-IIe 500MHz) with 1.0GB RAM dedicated to running CAS. 2. CAS2.0.12中关于ticket的生成 CAS创建一个位数很长的随机数(ticket)。CAS把这个ticket和成功登录的用户以及用户要访问的service联系起来。例如,如果用户peon重定向自service S,CAS创建ticket T,这个ticket T允许peon访问service S。这个ticket是个一次性的凭证;它仅仅用于peon和仅仅用于service S,并且只能使用一次,使用之后马上会过期,即ticket通过验证,CAS立即删除该ticket,使它以后不能再使用。这样可以保证其安全性。 关于ST,在取一个ST时,即使用deleteTicket(ticketId)同时将一次性的ST删除;而对于TGT或PT,则通过resetTimer(ticketId)以更新TGT或PT的时间。在CAS服务端返回的ST中只能得出用户名。 取自"http://www.ose.com.cn/wiki/index.php?title=CAS介绍" [学习] 使用 CAS 实现 SSO 实践过程 前一段时间曾经研究过一段关于 SSO 的技术,也深知 SSO(Single Sign-On) 是一个博大精深的主题,而我们通常提起的仅仅是所谓的 WebApp SSO,其主要特点是SSO 应用之间走Web协议 ( 如 HTTP/SSL) ,并且 SSO 都只有一个登录入口,SSO 的核心就是所谓的单点登录和身份认证。 CAS(Central Authentication Service) 是 Yale 大学发起的一个开源项目,据统计,大概每 10 个采用开源构建 Web SSO 的 Java 项目,就有 8 个使用 CAS 。对这些统计,我虽然不以为然,但有一点可以肯定的是,CAS 是我认为最简单实效,而且足够安全的 SSO 选择。前一段时间正好做了配置 CAS 的实践,记下主要步骤,以供日后参考。 1.系统配置 以下是必需的软件环境: 1. JDK 1.4.2 or higher 2. Tomcat 5.X 3. JSSE-1_X(安装方法可见下载包) 2. Tomcat 配置,启用SSL a. 在要安装CAS的机器上为Tomcat生成用于SSL通讯的密钥:%JAVA_HOME%/bin/keytool -genkey -alias tomcat -keyalg RSA 这时需要输入密钥密码和其他参数(第一个参数CN必须设置为CAS机器名,这里架设为 james-huang,本机使用localhost测试),会在系统用户目录中生成.keystore密钥文件。 b. 导出别名为tomcat的密钥文件:%JAVA_HOME%/bin/keytool -export -file /path/server.crt -alias tomcat 这时需要输入上一步设定的密码,结果会在/path/目录生成server.crt信任状。 c. 为客户端的JVM导入密钥::%JAVA_HOME%/bin/keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file /path/server.crt -alias tomcat 注意:输入密码时密码为"changeit",这是默认密码。 d. 修改服务端Tomcat配置文件,启用SSL:修改$CATALINA_HOME/conf/server.xml,去掉有关SSL的那一段的注释,需要 在connector字段中加 keystorePass="password"(password即为1、2步中的密码),keystoreFile="keystorePath" (可以把第一步生成的.keystore复制到$CATALINA_HOME/conf/下,这样keystoreFile= "conf/.keystore")。重启Tomcat,测试 https://james-huang:8443 是否可以访问(推荐将服务器填上Server的机器名)。 3. CAS Server安装 下载CAS Server 3.0.6(可到耶鲁大学官方站或者到 http://www.ja-sig.org/products/cas/ 下载),将其中的cas.war复制到$CATALINA_HOME/webapps下(当然现在CAS中的用户密码认证是很简陋的,产品化必须重写这部分代码,生成新的cas.war)。这时,重启Tomcat应该就可以通过访问 https://james-huang:8443/cas 看到CAS的登录界面了。 4. CAS Client 部署 建议自己创建一个Project以便进行试验(架设工程名为 casclient),下载最新版本的Yale Java CAS Client(2.0.11)并将casclient.jar复制到这两个项目的WEB-INF目录的lib下。修改两个项目的WEB-INF/web.xml,添加如下的过滤器: 代码: <!-- CAS Filters --> <filter> <filter-name>CASFilter</filter-name> <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name> <param-value>https://james-huang:8443/cas/login</param-value> </init-param><!--这里的james-huang是服务端的主机名--> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> <param-value>https://james-huang:8443/cas/proxyValidate</param-value> </init-param><!--这里的james-huang是服务端的主机名,而且必须是--> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name> <param-value>client:port</param-value><!--client:port就是需要CAS需要拦截的地址和端口,一般就是Client端的IP和port--> </init-param> </filter> <filter-mapping> <filter-name>CASFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 这样,重启Client端的Tomcat并访问 http://client-ip:8080/casclient,你就会被重定向到Server端的CAS登陆页;此时你可测试登录(默认的认证Handler只要求username=password,可任意选择用户名);登录后就会进入casclient的欢迎页面了;继续定位到http://client-ip:8080/casclient,执行任何一个例子也不用再输入密码。 至此,全部架设过程及测试完毕。当然,这仅仅是一个测试过程,若要实际环境中我们需要到数据库验证用户有效性,我们必须借助到用户数据库。首先,我们需 要创建自己的数据库验证器,当然也可以使用Jasig提供的cas-server-jdbc.jar,通常我们会修改cas-server- jdbc的源码满足自己的需要,并把mysql的jdbc驱动和修改后的jar部署到
    转载请注明原文地址: https://ibbs.8miu.com/read-2234312.html

    最新回复(0)