CAS 在生产环境中可能更容易





5.00/5 (1投票)
CAS 在生产环境中可能更容易
引言
对于单点登录 (SSO),我真心认为 JA-SIG 的中央身份验证服务 (CAS) 拥有最佳的开源解决方案。请注意我用“开源”一词修饰了这句话。如果它是安全的,并且可以免费公开获取,没有被黑客攻击,被公众广泛使用,并且实现文档记录良好,我就心动了。这并不是说我没有像任何其他 Java EE 实现一样遇到过问题。我的解决方案将在一个门户服务器上提供 CAS 服务器,并将应用程序驻留在另一个服务器上。为了试用测试和演示目的,我首先在单个 Redhat 服务器上安装 JBoss。而且,违背 CAS 的建议,我一直在使用 localhost。
我的第一个目标是将 CAS 运行为 SSO 入口点,使用默认身份验证(相同的用户,相同的密码),然后重定向到 JBoss 上的三个简单 Web 应用程序之一。我的第一个障碍是让 CAS 信任 HTTPS 所需的自签名证书。我首先创建了一个本地密钥库,并尝试将其导入到 $JAVA_HOME/jre/lib/security/cacerts。这不起作用。我不确定为什么,但明确告诉 CAS 信任哪个密钥库或证书却有效了。请考虑以下来自 cas-server-webapp 中 security.xml 的部分。
<bean id="casProxyTicketValidator"
class="org.acegisecurity.providers.cas.ticketvalidator.CasProxyTicketValidator"
p:casValidate="${cas.securityContext.casProxyTicketValidator.casValidate}"
p:serviceProperties-ref="serviceProperties">
<property name="proxyCallbackUrl"><null /></property>
<property name="trustStore">
<value>/usr/local/cas/mykeystore.jks</value>
</property>
</bean>
我让 CAS 正常工作,并能够调用一个应用程序,它立即跳转到 CAS 登录页面进行身份验证。现在,我将简单的身份验证替换为 LDAP 模块,并使用 Microsoft 网络上的现有 Active Directory。用户在启动 PC 时使用这些凭据进行身份验证。如果他们想访问任何 JBoss 应用程序,他们现在只需在登录门户(CAS 服务器)处进行一次身份验证。
让 LDAP 与 CAS LDAP 模块一起工作有点棘手,但同样,在我可以查询 LDAP 服务器之前,我必须解决 CAS 和 LDAP 证书之间的另一个信任问题。Microsoft 管理员给了我来自 LDAP 服务器的证书文件,我将其导入到之前生成的密钥库中。命令如下所示。
$keytool -import -trustcacerts -
keystore /usr/local/cas/mykeystore -storepass 123456 -
noprompt -alias mycerts -file ldapserver.cer
此命令将 LDAP 服务器证书添加到 CAS “信任”的密钥库中。除了 LDAP 身份验证处理程序的部署配置之外,现在就可以正常工作了。
在生产环境中安装 CAS 时,SSL 证书将被签名,这些问题不应发生。现在,这并没有使 LDAP 过滤器和 searchBase 配置更容易,但那是另一篇文章的主题。