服务端和客户端为了节省资源,可以配置在同一台机器上,但为了便于区分,我们可以想像他们是配置在不同的机器上的,而且把它们的配置步骤完全分开。先从服务端的配置说起:
1. 服务端装好了JDK,假设路径在D:/sso/apps/jdk150_06 下,JAVA_HOME用该值设置好;
2. Tomcat的安装唯一注意的就是JRE选择D:/sso/apps/jdk150_06/jre;
3. 用keytool生成证书时,computer name为必填,其余随意。 然后导出到server.crt,最后将存在server.crt里面的证书导入到 ../jre/lib/security/cacerts. 这时cacerts就可以为Tomcat所用了。保存好server.crt供客户端导入。详细如下:
D:/sso/apps/jdk150_06/bin>keytool -genkey -alias tomcat -keypass changeit -keyalg RSA
输入keystore密码: changeit
您的名字与姓氏是什么?
[Unknown]: yejia
您的组织单位名称是什么?
[Unknown]: hp
您的组织名称是什么?
[Unknown]: GDCC
您所在的城市或区域名称是什么?
[Unknown]: ShangHai
您所在的州或省份名称是什么?
[Unknown]: SH
该单位的两字母国家代码是什么
[Unknown]: cn
CN=yejia, OU=hp, O=GDCC, L=ShangHai, ST=SH, C=cn 正确
吗?
[否]: y
D:/sso/apps/jdk150_06/bin>keytool -export -alias tomcat -keypass changeit -file server.crt
输入keystore密码: changeit
保存在文件中的认证 <server.crt>
D:/sso/apps/jdk150_06/bin>keytool -import -file server.crt -keypass changeit -keystore ../jre/lib/security/cacerts
输入keystore密码: changeit
Owner: CN=yejia, OU=hp, O=GDCC, L=ShangHai, ST=SH, C=cn
发照者: CN=yejia, OU=hp, O=GDCC, L=ShangHai, ST=SH,C=cn
序号: 4aaf8e42
有效期间: Tue Sep 15 20:53:22 GMT+08:00 2009 至: Mon Dec 14 20:53:22 GMT+08:00 2009
认证指纹:
MD5: CF:BB:4C:6B:76:44:C6:41:C4:74:86:F5:06:D7:FB:86
SHA1: D3:ED
4. Andreas Sterbenz有一篇博客,是导入或测试证书是否导入成功的一种很优雅的做法。
地址:http://blogs.sun.com/andreas/entry/no_more_unable_to_find
务必用上面blog提供的InstallCert.java将证书成功导入到%JAVA_HOME%/jre/lib/security/cacerts,所以前面的环境变量JAVA_HOME务必先设置好了。出现类似于以下结果,才说明证书导入成功了:
% java InstallCert ecc.fedora.redhat.com
Loading KeyStore jssecacerts...
Opening connection to ecc.fedora.redhat.com:443...
Starting SSL handshake...
No errors, certificate is already trusted
Server sent 2 certificate(s):
1 Subject CN=ecc.fedora.redhat.com, O=example.com, C=US
Issuer CN=Certificate Shack, O=example.com, C=US
sha1 2e 7f 76 9b 52 91 09 2e 5d 8f 6b 61 39 2d 5e 06 e4 d8 e9 c7
md5 dd d1 a8 03 d7 6c 4b 11 a7 3d 74 28 89 d0 67 54
2 Subject CN=Certificate Shack, O=example.com, C=US
Issuer CN=Certificate Shack, O=example.com, C=US
sha1 fb 58 a7 03 c4 4e 3b 0e e3 2c 40 2f 87 64 13 4d df e1 a1 a6
md5 72 a0 95 43 7e 41 88 18 ae 2f 6d 98 01 2c 89 68
Enter certificate to add to trusted keystore or 'q' to quit: [1]
q
KeyStore not changed
5. 修改Tomcat的配置文件server.xml,开通端口8443和https协议。
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="C:/Documents and Settings/yejia/.keystore"
keystorePass="changeit"
truststoreFile=" D:/sso/apps/jdk150_06 /jre/lib/security/cacerts" />
6. 把cas-server-3.3.2/modules目录下的cas-server-webapp-3.3.2.war重命名为cas.war,然后copy and paste到tomcat的webapps下面,启动Tomcat会自动发布。然后在IE输入https://yejia:8443/cas/login 就可以验证是否发布成功了,输入相同的用户名和密码(cas/cas)就会返回成功的提示页面。要修改页面的显示,到Tomcat的webapps下面,cas/WEB-INF/view/jsp/default/ui下面的jsp页面去修改。
7. 很显然我们使用CAS统一认证,用其自带的默认用户名密码机制是行不通的,一般的做法是把所有用户信息放在LDAP服务器上,CAS通过配置LDAP来获取并验证用用户。