在Ubuntu 12.04上配置CAS 3.5.2从WiKID进行双因素身份验证

在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作为协议。

WiKID半径客户端

单击添加或修改并输入共享密钥。 确保共享密钥与deployerContext.xml文件中的一样 。 将返回属性留空。

WiKID半径客户端

现在我们来添加相互的https身份验证。 请注意,目前,相互的https身份验证仅支持端口443 - 假定此产品正在惠及无法检测到MiTM攻击或验证证书的普通用户。 转到WiKIDAdmin上的域选项卡,然后编辑或创建您要使用的域。 在注册URL下,您的CAS服务器的URL:

WiKID服务器将转到该URL并存储SSL证书的散列。 请注意:

Radius做了很多缓存,所以你需要重新启动WiKID。 如果WiKID控制防火墙,这也将打开一个到CAS服务器的端口。 从WiKID服务器的命令行运行:

wikidctl restart
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏