在Ubuntu 12.04中配置CAS 3.5.2,从WiKID进行双因素认证
作者: Nick Owen在推特上关注我
单点登录是一项伟大的技术。 要求用户登录到多个应用程序是巨大的麻烦,鼓励密码重用和简单的密码。 安全需要关注可用性。 如果您可以使用户的生活更好,同时提高安全性,每个人都将赢得胜利。
在这方面,我们将如何使用WiKID强认证服务器设置开源CAS SSO产品,用于会话的双因素身份验证和用于主机身份验证的相互https身份验证。 显然,对于登录使用双因素身份验证会增加安全性,因为用户必须具有获取访问权限的因素,在这种情况下,知道PIN和拥有嵌入在令牌中的私钥。 不太明显的是强大的相互认证的好处。 WiKID通过使用一次性密码下载CAS网站的SSL证书的哈希值。 在呈现OTP之前,令牌将通过用户的连接进入CAS URL,抓取SSL证书并对其进行散列。 如果哈希匹配,则显示OTP,并将默认浏览器启动到CAS URL。 如果它们不匹配,则存在潜在的攻击,并且用户收到错误,指出URL已更改。 由于Wi-Fi无处不在,MiTM攻击更容易执行。
CAS服务器正在Ubuntu 12.04 Server上运行,并且正在使用Radius与WiKID Strong Authentication Server Enterprise Edition进行通信。
构建CAS和cas.war文件
更新您的服务器:
sudo apt-get update
CAS是用Maven构建的,所以你需要安装它:
sudo apt-get install maven2
你也需要openjdk。
sudo apt-get install openjdk-7-jdk
我也必须确保JAVA_HOME设置正确:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/
接下来从站点下载最新版本的CAS 。 目前的版本是3.5.2。
wget wget http://downloads.jasig.org/cas/cas-server-3.5.2-release.tar.gz
tar -xzvf cas-server-3.5.2-release.tar.gz
编辑pom.xml
cd cas-server-3.5.2/cas-server-webapp/
vim pom.xml
我添加了以下依赖项以添加对radius的支持:
<dependency> <groupId>${project.groupId}</groupId> <artifactId>cas-server-support-radius</artifactId> <version>${project.version}</version> </dependency>
编辑deployerContext.xml
vim src/main/webapp/WEB-INF/deployerConfigContext.xml
在此文件中,您需要注释掉SimpleTestUsernamePasswordAuthenticationHandler,这是用于演示目的,并添加有关您的radius配置的信息。 这些bean列在验证处理程序下。
<property name="authenticationHandlers"> <list> <!-- | This is the authentication handler that authenticates services by means of callback via SSL, thereby validating | a server side SSL certificate. +--> <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" /> <!-- | This is the authentication handler declaration that every CAS deployer will need to change before deploying CAS | into production. The default SimpleTestUsernamePasswordAuthenticationHandler authenticates UsernamePasswordCredentials | where the username equals the password. You will need to replace this with an AuthenticationHandler that implements your | local authentication strategy. You might accomplish this by coding a new such handler and declaring | edu.someschool.its.cas.MySpecialHandler here, or you might use one of the handlers provided in the adaptors modules. +--> <!-- <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /> --> <bean class="org.jasig.cas.adaptors.radius.authentication.handler.support.RadiusAuthenticationHandler"> <property name="servers"> <bean class="org.jasig.cas.adaptors.radius.JRadiusServerImpl"> <constructor-arg index="0" value="10.100.0.170" /> <constructor-arg index="1" value="secret" /> <constructor-arg index="2"> <bean class="net.jradius.client.auth.PAPAuthenticator" /> </constructor-arg> </bean> </property> </bean> </list> </property> </bean>
在这个例子中,CAS服务器正在与WiKID服务器直接交谈。 您也可以使用半径服务器,例如CAS和WiKID之间的freeradius或NPS进行授权。 如果您有以上的其中一个,您可以列出服务器的冗余:
<bean class="org.jasig.cas.adaptors.radius.authentication.handler.support.RadiusAuthenticationHandler"> <property name="servers"> <list> <bean class="org.jasig.cas.adaptors.radius.JRadiusServerImpl"> <constructor-arg index="0" value="10.100.0.170" /> <constructor-arg index="1" value="secret" /> <constructor-arg index="2"> <bean class="net.jradius.client.auth.PAPAuthenticator" /> </constructor-arg> </bean> <bean class="org.jasig.cas.adaptors.radius.JRadiusServerImpl"> <constructor-arg index="0" value="10.100.0.171" /> <constructor-arg index="1" value="secret" /> <constructor-arg index="2"> <bean class="net.jradius.client.auth.PAPAuthenticator" /> </constructor-arg> </bean> </list> </property> <property name="failoverOnException" value="true" /> </bean>
使用maven构建战争文件的时间:
mvn clean package
这个comamnd应该在cas-server-3.5.2 / cas-server-webapp / target /
配置Tomcat
首先下载最新的tomcat并解压缩。 在写这篇文章的时候是7.0.42。 我们将调用此目录$ tomcathome
。
sudo tar -xzvf apache-tomcat-7.0.42.tar.gz
创建SSL密钥库:
keytool -genkey -alias tomcat -keyalg RSA
您可能需要导入签署的生产证书,但这将用于测试。
编辑$ tomcathome / conf / server.xml
文件以创建SSL端口。
sudo vim conf/server.xml
创建监听器,输入相应的位置和密码:
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" keystoreFile="/path/to/.keystore" keystorePass="keystorePassphrase" clientAuth="false" sslProtocol="TLS" />
将CAS war文件复制到webapps目录中:
cp ~/cas-server-3.5.2/cas-server-webapp/target/cas.war $tomcathome/webapps/
启动tomcat:
sudo $tomcathome/bin/startup.sh
如果一切顺利,您应该在443端口上有一个监听器:
sudo netstat -anp | grep 443
tcp6 0 0 :::443 :::* LISTEN 10105/java
将war文件复制到tomcat的webapps目录中将会部署它:
cp /home/username/cas-server-3.5.2/cas-server-webapp/target/cas.war $tomcathome/webapps/
如果你看到$ tomcathome / logs / catalina.out
,你应该看到这一行: “INFO:部署Web应用程序归档cas.war”
。
配置WiKID
添加半径网络客户端
有关设置WiKID服务器的完整说明, 请点击此处 。 我们只会覆盖网络客户端部分。
CAS服务器将是WiKID强认证服务器的半径网络客户端。 在WiKIDAdmin Web ui上,获取网络客户端选项卡,选择“创建新的网络客户端”,然后输入适合您的CAS服务器的信息,选择RADIUS作为协议。
单击添加或修改并输入共享密钥。 确保共享密钥与deployerContext.xml
文件中的一样
。 将返回属性留空。
现在我们来添加相互的https身份验证。 请注意,目前,相互的https身份验证仅支持端口443 - 假定此产品正在惠及无法检测到MiTM攻击或验证证书的普通用户。 转到WiKIDAdmin上的域选项卡,然后编辑或创建您要使用的域。 在注册URL下,您的CAS服务器的URL:
WiKID服务器将转到该URL并存储SSL证书的散列。 请注意:
Radius做了很多缓存,所以你需要重新启动WiKID。 如果WiKID控制防火墙,这也将打开一个到CAS服务器的端口。 从WiKID服务器的命令行运行:
wikidctl restart