原文转自:http://opengeek.cn/forum-viewthread-tid-151-fromuid-23.htmlhtml
CAS( Central Authentication Service)是由JA-SIG开发的一套开源的单点登陆系统,在教育行业有着很是普遍的应用,有很多企业也在使用它。CAS的特色是安全性很是高,可维护性高。下面详细描述一下如何实现ZCS与CAS的集成。java
1.配置ZCS的CACert keystore
在zimbra用户下执行如下脚本,将CAS的服务器证书(证书或证书链)导入到ZCS的CACert keystore中:
- /opt/zimbra/java/bin/keytool -import -file casserver.cert -alias cascert -trustcacerts -keystore /opt/zimbra/java/jre/lib/security/cacerts -storepass changeit
- /opt/zimbra/java/bin/keytool -import -file casserver.chain -alias caschain -trustcacerts -keystore /opt/zimbra/java/jre/lib/security/cacerts -storepass changeit
复制代码
2.部署CAS客户端
3.修改ZCS的配置文件
3.1 zimbra应用
将下列代码加入到/opt/zimbra/jetty/etc/zimbra.web.xml文件中,插入位置应在<servlet>前(约230行),而后替换cas.url.com:port和 zimbra.url.com:port。
默认的端口:CAS为8443,ZCS为443或80。
- <filter>
- <filter-name>CasSingleSignOutFilter</filter-name>
- <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>CasSingleSignOutFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <listener>
- <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
- </listener>
- <filter>
- <filter-name>CasAuthenticationFilter</filter-name>
- <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
- <init-param>
- <param-name>casServerLoginUrl</param-name>
- <param-value>https://cas.url.com:port/cas/login</param-value>
- </init-param>
- <init-param>
- <param-name>serverName</param-name>
- <param-value>https://zimbra.url.com:port</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>CasAuthenticationFilter</filter-name>
- <url-pattern>/public/preauth.jsp</url-pattern>
- </filter-mapping>
- <filter>
- <filter-name>CasValidationFilter</filter-name>
- <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
- <init-param>
- <param-name>casServerUrlPrefix</param-name>
- <param-value>https://cas.url.com:port/cas</param-value>
- </init-param>
- <init-param>
- <param-name>serverName</param-name>
- <param-value>https://zimbra.url.com:port</param-value>
- </init-param>
- <init-param>
- <param-name>redirectAfterValidation</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>CasValidationFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <filter>
- <filter-name>CasHttpServletRequestWrapperFilter</filter-name>
- <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>CasHttpServletRequestWrapperFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
复制代码
3.2 zimbraAdmin应用
针对/opt/zimbra/jetty/etc/zimbraAdmin.web.xml文件进行同上一步的操做(插入内容、替换关键字)。
ZCS管理控制台的默认端口是7071。
4.创建PreAuth键
在zimbra用户身份下执行如下脚本:
[pre]
- zmprov gdpak yourdomain.com
复制代码
[/pre]将会获得这样的PreAuth键值: "359d722926fc3daebd0fee5d8b9dad9bbe1646e68041afa8ab662c6a9152e6b9"。
5.创建preauth.jsp文件
5.1 zimbra应用
[li]将附件(附件为ZIP压缩文件,请将扩展名由GIF改成ZIP后打开)中的preauth.jsp-zimbra复制为: /opt/zimbra/jetty/webapps/zimbra/public/preauth.jsp[/li][li]用上一步提到的 PreAuth键值替换其中的DOMAIN_KEY[/li][li]替换第90处的domainname.com[/li]
5.2 zimbraAdmin应用
[li]将 preauth.jsp-zimbraadmin复制为: /opt/zimbra/jetty/webapps/zimbraAdmin/public/preauth.jsp[/li][li]用上一步提到的 PreAuth键值替换其中的DOMAIN_KEY[/li][li]替换第92处的domainname.com[/li]
6.替换登陆和注销URL
以zimbra用户身份执行如下脚本,替换ZCS默认的登陆和注销URL:
[pre]
- zmprov md yourdomain.com zimbraWebClientLoginURL https://zimbra.url.com:port/zimbra/public/preauth.jsp
- zmprov md yourdomain.com zimbraWebClientLogoutURL https://cas.url.com:port/cas/logout
- zmprov md yourdomain.com zimbraAdminConsoleLoginURL https://zimbra.url.com:port/zimbraAdmin/public/preauth.jsp
- zmprov md yourdomain.com zimbraAdminConsoleLogoutURL https://cas.url.com:port/cas/logout
复制代码
默认端口同前。
[/pre]
7.重启ZCS 以zimbra身份运行zmcontrol restart命令重启ZCS服务。