最近因为公司业务需要,要做单点登录(涉及到java和php业务系统)。之前对此概念一无所知,中间也走了很多弯路。不过经过屡败屡战,终于在刚刚搞定cas 和spring security。
由于最初对单点登录没有概念,当接到单点登录任务的时候,很渺茫。请教了身边的同事。要么只做过接收端(业务系统端)解析功能,要么用的付费产品,都帮不上忙,不过在过程中慢慢建立的单点登录的概念。
自己在网上搜索关于单点登录的信息,知道了yale大学的cas。打算就用这个,后来由于各种原因没有使用。后来定下的方案是模拟登录,同步登录的形式。中间尝试了各种方法,例如,ajax,iframe,img的src,js的远程调用等。由于不但业务系统的语言类型不一样,而且有的是产品,还有spring security等,上面采用的方法都已失败告终。
上面的说了这么多,也是希望大家少走弯路。下面开始转入正题。
[b] 一,https协议的配置[/b]
[b] 1,生成证书[/b]
1.1、用keytool生成证书.这里共参考了两篇文章,蓝色部分是我的实际操作情况:
keytool -genkey -alias tomcat -keyalg RSA -keystore c:/Tomcat5.5/mykey
实际操作
[color=blue]keytool -genkey -alias tomcat -keyalg RSA -keystore E:/tomcat-6.0/tomcat.keystore
密码:123456
验证是否已创建过同名的证书
keytool -list -v -keystore "%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass changeit
删除已创建的证书
keytool -delete -alias cacerts -keystore "%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass changeit[/color]
说明:
这里-alias tomcat 是表示生成的这个证书的别名叫tomcat,-keyalg RSA 指的是采用的RSA算法,-keystore c:/Tomcat5.5/mykey是指生成的证书存储的位置。回车后会提示你输入keystore password,这可以自己定(这里输入12456,下面配tomcat时要用的),然后是一些个人信息及组织信息,可以轻松搞定。
注意:密码输入后,会让你输入其他信息,记得这里第一个姓名必须是服务器的域名 由于我是在本机所以是localhost
这里要注意如果不这样写就会报如下异常:
java.io.IOException: HTTPS hostname wrong: should be <localhost>
a) 生成密钥对
使用下面的的命令
keytool -genkey -alias tomcat -keyalg RSA -keystore tomcat.keystore
密码是:changeit
姓名是:localhost
其他的提示输入的信息可以随便
这个命令生成的文件默认在当前目录,即CMD的当前目录C:\Documents and Settings\Administrator(如果没有使用cd命令)。
1.2、创建证书后,就导出证书,
keytool -export -file c:\cas.cer -alias tomcat -keystore C:\Tomcat5.5\mykey
[color=blue]keytool -export -file c:\cas.cer -alias tomcat -keystore E:\tomcat-6.0\tomcat.keystore[/color]
(从C:\Tomcat5.5\mykey里取出证书入到C:\下,如果没有指定,就是在用下目录下C:\Documents and Settings\用户目录名\)
b) 将服务器证书导出为证书文件
使用下面的命令
keytool -export -alias tomcat -file tomcat.crt -keystore tomcat.keystore
这里注意一点,导出来的crt证书文件在双击打开的时候可能会看到有红叉在证书上, 这个时候只要按照向导安装完成就可以了。
1.3、把上面那步的(csa.cer)这个证书导入java中的cacerts证书库里?
[color=blue] 开始 >> 运行 >> 输入cmd 进入dos命令行 >>
再用cd进入到C:\Program Files\Java\jdk1.5.0_05\jre\lib\security这个目录下
敲入如下命令回车执行
keytool -import -alias cacerts -keystore cacerts -file C:\cas.cer -trustcacerts
此时命令行会提示你输入cacerts证书库的密码,
你敲入changeit就行了,这是java中cacerts证书库的默认密码,
你自已也可以修改的。
如果报错信息是已经存在tomcat证书,就执行:
keytool –delete –keystore cacerts –file C:\cas.cer –alias -trustcacerts [/color]
c) 将证书文件导入到java证书库cacerts中
将在C:\Documents and Settings\Administrator下的tomcat.crt文件和在C:\Program Files\Java\jdk1.5.0_15\jre\lib\
(JDK不同位置可能不同)下的security拷贝到c:\下,然后运行下面的命令:
keytool -import -file c:\tomcat.crt -keystore c:\cacerts -alias tomcat
然后将cacerts文件拷贝回去,注意备份源文件。
tomcat.crt可以拷到tomcat_home下,这里为C:\Program Files\tomcat5.5.26。
1.4、重启Tomcat后在地址栏输入:https://localhost:8888 如果配置正确就搞定了,浏览显示的时候提示安装证书(你就选择安装上面导出的那个证书,也可从IE--工具--Internet首选项--内容--证书--然后按提示导入即可)。
如果是IE的话,首先会弹出一个对话框,提示你证书不是由信任的机构颁发的。这个是很自然的,因为证书是自己生成的。
单击“查看证书”,单击“安装证书”,在向导种选择“将所有的证书放在下面存储区”,然后单击“浏览”,选择“受信任的根证书颁发机构”。单击确定安装证书。这样IE以后就会认为证书是由受信任的机构颁发的。
如果不想安装,也可以直接在对话框中单击“是”
[b]2.配置ssl[/b]
server.xml中添加的配置信息:
< Connector port="8443"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="C:\tomcat\mykey(指生成的证书存储的位置)" keystorePass="123456"(上面你输入的那个密码) />
[color=blue] <Connector protocol="org.apache.coyote.http11.Http11Protocol"
port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="E:\tomcat-6.0\tomcat.keystore" keystorePass="123456"
truststoreFile="D:\Program Files\Java\jdk1.6.0_03\jre\lib\security\cacerts"
clientAuth="false" sslProtocol="TLS"/> [/color]
[b]二,配置cas服务端[/b]
服务端的配置主要在deployerConfigContext.xml文件的配置。在这里不详细讲了,我把cas服务端的整个工程压缩了,包括涉及到的一些表结构。
[b]三,业务系统的spring security的配置。[/b]
这部分的配置,主要有两个文件:1,web.xml;2,applicationContext-security.xml关于这部分的我也不算详细讲,但是我会把项目原始的都上传。其中关于applicationContext-security.xml这个文件,我会上传三个文件:不包含cas的spring security的原始配置ora-applicationContext-security.xml;cas-sample中的样例配置;改造后的和cas整合的cas-applicationContext-security.xml以方便大家对照使用。
附件说明:cas.rar服务端工程;cas-sample,spring security中的例子;xml.rar中包含了web.xml,ora-applicationContext-security.xml,cas-applicationContext-security.xml。其中工程依赖的包都删掉了。
参考资料
http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/index.html 对了解cas的单点登录原理有帮助
http://chengyu-555.iteye.com/blog/263244 对于keytool生成证书生成和ssl配置比较有帮助
http://www.blogjava.net/goodlyts/archive/2009/10/20/299091.html cas的服务端配置
http://blog.youkuaiyun.com/baozhengw/archive/2009/05/15/4188972.aspx 对于cas和spring security的配置比较有帮助
ps:除了上面的文章的帮助,中间还浏览了很多其他的文章(甚至还有maven)。其中中强烈推荐spring security中的关于cas的例子,如果真想把问题搞懂,最好能把该例子搭建起来。
交流方式:guowenyang@live.cn。
由于最初对单点登录没有概念,当接到单点登录任务的时候,很渺茫。请教了身边的同事。要么只做过接收端(业务系统端)解析功能,要么用的付费产品,都帮不上忙,不过在过程中慢慢建立的单点登录的概念。
自己在网上搜索关于单点登录的信息,知道了yale大学的cas。打算就用这个,后来由于各种原因没有使用。后来定下的方案是模拟登录,同步登录的形式。中间尝试了各种方法,例如,ajax,iframe,img的src,js的远程调用等。由于不但业务系统的语言类型不一样,而且有的是产品,还有spring security等,上面采用的方法都已失败告终。
上面的说了这么多,也是希望大家少走弯路。下面开始转入正题。
[b] 一,https协议的配置[/b]
[b] 1,生成证书[/b]
1.1、用keytool生成证书.这里共参考了两篇文章,蓝色部分是我的实际操作情况:
keytool -genkey -alias tomcat -keyalg RSA -keystore c:/Tomcat5.5/mykey
实际操作
[color=blue]keytool -genkey -alias tomcat -keyalg RSA -keystore E:/tomcat-6.0/tomcat.keystore
密码:123456
验证是否已创建过同名的证书
keytool -list -v -keystore "%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass changeit
删除已创建的证书
keytool -delete -alias cacerts -keystore "%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass changeit[/color]
说明:
这里-alias tomcat 是表示生成的这个证书的别名叫tomcat,-keyalg RSA 指的是采用的RSA算法,-keystore c:/Tomcat5.5/mykey是指生成的证书存储的位置。回车后会提示你输入keystore password,这可以自己定(这里输入12456,下面配tomcat时要用的),然后是一些个人信息及组织信息,可以轻松搞定。
注意:密码输入后,会让你输入其他信息,记得这里第一个姓名必须是服务器的域名 由于我是在本机所以是localhost
这里要注意如果不这样写就会报如下异常:
java.io.IOException: HTTPS hostname wrong: should be <localhost>
a) 生成密钥对
使用下面的的命令
keytool -genkey -alias tomcat -keyalg RSA -keystore tomcat.keystore
密码是:changeit
姓名是:localhost
其他的提示输入的信息可以随便
这个命令生成的文件默认在当前目录,即CMD的当前目录C:\Documents and Settings\Administrator(如果没有使用cd命令)。
1.2、创建证书后,就导出证书,
keytool -export -file c:\cas.cer -alias tomcat -keystore C:\Tomcat5.5\mykey
[color=blue]keytool -export -file c:\cas.cer -alias tomcat -keystore E:\tomcat-6.0\tomcat.keystore[/color]
(从C:\Tomcat5.5\mykey里取出证书入到C:\下,如果没有指定,就是在用下目录下C:\Documents and Settings\用户目录名\)
b) 将服务器证书导出为证书文件
使用下面的命令
keytool -export -alias tomcat -file tomcat.crt -keystore tomcat.keystore
这里注意一点,导出来的crt证书文件在双击打开的时候可能会看到有红叉在证书上, 这个时候只要按照向导安装完成就可以了。
1.3、把上面那步的(csa.cer)这个证书导入java中的cacerts证书库里?
[color=blue] 开始 >> 运行 >> 输入cmd 进入dos命令行 >>
再用cd进入到C:\Program Files\Java\jdk1.5.0_05\jre\lib\security这个目录下
敲入如下命令回车执行
keytool -import -alias cacerts -keystore cacerts -file C:\cas.cer -trustcacerts
此时命令行会提示你输入cacerts证书库的密码,
你敲入changeit就行了,这是java中cacerts证书库的默认密码,
你自已也可以修改的。
如果报错信息是已经存在tomcat证书,就执行:
keytool –delete –keystore cacerts –file C:\cas.cer –alias -trustcacerts [/color]
c) 将证书文件导入到java证书库cacerts中
将在C:\Documents and Settings\Administrator下的tomcat.crt文件和在C:\Program Files\Java\jdk1.5.0_15\jre\lib\
(JDK不同位置可能不同)下的security拷贝到c:\下,然后运行下面的命令:
keytool -import -file c:\tomcat.crt -keystore c:\cacerts -alias tomcat
然后将cacerts文件拷贝回去,注意备份源文件。
tomcat.crt可以拷到tomcat_home下,这里为C:\Program Files\tomcat5.5.26。
1.4、重启Tomcat后在地址栏输入:https://localhost:8888 如果配置正确就搞定了,浏览显示的时候提示安装证书(你就选择安装上面导出的那个证书,也可从IE--工具--Internet首选项--内容--证书--然后按提示导入即可)。
如果是IE的话,首先会弹出一个对话框,提示你证书不是由信任的机构颁发的。这个是很自然的,因为证书是自己生成的。
单击“查看证书”,单击“安装证书”,在向导种选择“将所有的证书放在下面存储区”,然后单击“浏览”,选择“受信任的根证书颁发机构”。单击确定安装证书。这样IE以后就会认为证书是由受信任的机构颁发的。
如果不想安装,也可以直接在对话框中单击“是”
[b]2.配置ssl[/b]
server.xml中添加的配置信息:
< Connector port="8443"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="C:\tomcat\mykey(指生成的证书存储的位置)" keystorePass="123456"(上面你输入的那个密码) />
[color=blue] <Connector protocol="org.apache.coyote.http11.Http11Protocol"
port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="E:\tomcat-6.0\tomcat.keystore" keystorePass="123456"
truststoreFile="D:\Program Files\Java\jdk1.6.0_03\jre\lib\security\cacerts"
clientAuth="false" sslProtocol="TLS"/> [/color]
[b]二,配置cas服务端[/b]
服务端的配置主要在deployerConfigContext.xml文件的配置。在这里不详细讲了,我把cas服务端的整个工程压缩了,包括涉及到的一些表结构。
[b]三,业务系统的spring security的配置。[/b]
这部分的配置,主要有两个文件:1,web.xml;2,applicationContext-security.xml关于这部分的我也不算详细讲,但是我会把项目原始的都上传。其中关于applicationContext-security.xml这个文件,我会上传三个文件:不包含cas的spring security的原始配置ora-applicationContext-security.xml;cas-sample中的样例配置;改造后的和cas整合的cas-applicationContext-security.xml以方便大家对照使用。
附件说明:cas.rar服务端工程;cas-sample,spring security中的例子;xml.rar中包含了web.xml,ora-applicationContext-security.xml,cas-applicationContext-security.xml。其中工程依赖的包都删掉了。
参考资料
http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/index.html 对了解cas的单点登录原理有帮助
http://chengyu-555.iteye.com/blog/263244 对于keytool生成证书生成和ssl配置比较有帮助
http://www.blogjava.net/goodlyts/archive/2009/10/20/299091.html cas的服务端配置
http://blog.youkuaiyun.com/baozhengw/archive/2009/05/15/4188972.aspx 对于cas和spring security的配置比较有帮助
ps:除了上面的文章的帮助,中间还浏览了很多其他的文章(甚至还有maven)。其中中强烈推荐spring security中的关于cas的例子,如果真想把问题搞懂,最好能把该例子搭建起来。
交流方式:guowenyang@live.cn。
本文详细介绍了如何实现和配置单点登录系统,包括证书生成、SSL配置、CAS服务端配置、业务系统SpringSecurity配置等关键步骤。通过提供详细的命令、配置文件示例和参考资料,旨在帮助开发者减少弯路,高效完成单点登录的部署。
4675

被折叠的 条评论
为什么被折叠?



