1,dos进入进入tomcat安装路径的bin目录,输入
keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit - keystore server.keystore -validity 3600。此时会在bin下面生成一个 server.keystore文件。Validity代表天数。在接下来会让你填写姓名,其实就是你服务器的域名,注意,这里用ip是不行的,需要用服务器域名或者计算机全名。其他可以随便填写。
2,继续输入
keytool -export -trustcacerts -alias tomcat -file server.cer -keystore server.keystore -storepass changeit,导出证书,会在bin下面生成一个server.cer文件。
有了证书后,需要将它导入到jdk证书信任库,继续输入
keytool -import -trustcacerts -alias tomcat -file server.cer -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit。也就是说要在cacerts里面添加一个这样的证书,可以通过下面的命令得到证书信任列表: keytool -list -v -keystore D:/sdks/jdk1.5.0_11/jre/lib/security/cacerts。注意一点就是,我们一般把jdk放在C:\Program Files\java下,我试了一下不行,可能是有空格的原因,我的是直接放在c盘下的java文件夹中。当然也可以删除导入的证书,命令:
keytool -delete -alias tomcatsso -keystore cacerts -keypass changeit假如提示密码 默认是changeit。
3,最后修改tomca conf下的server.xml。它里面有一段屏蔽的代码如下
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" />
改变如下:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystorePass="changeit" keystoreFile="D:\apache-tomcat-6.0.26\bin\server.keystore" />这里注意的就是keystoreFile是你刚才生成的server.keystore。还就是protocol需要改成Http11Protocol的,不然会报错(网上有的是没有改的,但是不改我这里报错,改就好)。
4,最后启动https://localhost:8443/,可以看到浏览器地址栏有警告窗口,说明ssl配置成功。
5,然后需要cas的服务器和客户端 下载地址分别是:
http://www.ja-sig.org/downloads/cas/cas-server-3.1.1-release.zip
http://www.ja-sig.org/downloads/cas-clients/cas-client-java-2.1.1.zip
解压server包,把modules文件夹里面的cas-server-webapp-3.1.1.war 改名cas.war放入tomcat的下面,启动浏览,会出现server的界面,部署成功了。
一般的我们会把帐号密码放在数据库中,那么需要在webinf下面的deployerConfigContext文件中配置数据源
<bean id="casDataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/test??useUnicode=true&characterEncoding=utf8</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>root</value> </property> </bean>很明显,是spring实现。
AuthenticationHandler是个很重要的概念,表明你验证处理的方式,默认的是使用SimpleTestUsernamePasswordAuthenticationHandler,我们可以改这个注入的类,比如QueryDatabaseAuthenticationHandler或者SearchModeSearchDatabaseAuthenticationHandler。前者可用sql来查询,后者的方式如下:
<bean id="SearchModeSearchDatabaseAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler" abstract="false" lazy-init="default" autowire="default" dependency-check="default"> <property name="tableUsers"> <value>userinfo</value> </property> <property name="fieldUser"> <value>userName</value> </property> <property name="fieldPassword"> <value>password</value> </property> <property name="dataSource" ref="casDataSource" /> </bean>即给出表和表中代表帐号密码的字段,来匹配。这个时候启动,并输入你的帐号密码,可以提示成功或失败。
6,客户端程序(java web) ,你只需要把web.xml配置一下,如下:
<filter> <filter-name>CAS Filter</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://casserver:8443/cas/login</param-value> </init-param> <init-param> <param-name> edu.yale.its.tp.cas.client.filter.validateUrl </param-name> <param-value> https:// casserver:8443/cas/serviceValidate </param-value> </init-param> <init-param> <param-name> edu.yale.its.tp.cas.client.filter.serverName </param-name> <param-value>computerTest:8080</param-value> </init-param> <init-param> <param-name> edu.yale.its.tp.cas.client.filter.wrapRequest </param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Filter</filter-name> <url-pattern>/test/*</url-pattern> </filter-mapping>Casserver 代表服务器程序的计算机名或者域名。
computerTest代表客户端程序的计算机名或者域名。上面的代表cas服务器。显然,cas是通过过滤器保护你的资源。
7, 一般情况下,我们几乎不能保证你需要继承的系统都是在一个服务器上,假如对于分布在多个机器上的项目,有几点需要注意,一是你必须保证你cas服务器所在的机器能够用计算机名(或域名访问到)(不能的话另见局域网内不能通过计算机名访问的解决办法.doc)。二是,在客户端服务器(tomcat)中也需要配置ssl,配置方法就是把上面生成的证书导入到jdk中,并且要和cas服务器进行ssl握手,握手方式如下:java InstallCert casserver:8443,接下来的选择项中输入1,搞定。
以上是今天研究的一点成果,特别是配置的时候有种让人抓狂的感觉,感觉有点凌乱,但是按照这个步骤搞,肯定是没什么问题的。
By 阿飞哥 转载请说明
腾讯微博: http://t.qq.com/duyunfeiRoom
新浪微博: http://weibo.com/u/1766094735