jasig cas server是一个开源的单点登录认证服务器。部署很简单,下载后将war包放入tomcat后启动。需要理解并解决的问题有:
一、使tomcat支持https
https协议通过ssl和数字证书来保证c/s间的数据传输安全。一般说来非对称加密算法性能要低于对称加密算法,所以ssl协议是用对称加密算法进行信息加密的。而在双方确立信任关系的时候需要用数字证书(非对称加密)来相互认证和商定密钥。那么要使tomcat支持https,部署密钥库/证书这一步是少不了的。证书可以花钱买,即全球可信证书是被浏览器默认支持的(不出现警告提示)。舍不得花钱就用私人证书,当然把私人证书导入到可信任列表里也可以除去警告提示(见后)
二、生成私人证书
jdk工具keytool提供了多种和密钥库/证书相关的功能和使用方法,详见帮助。介绍几个常见的操作。关于密钥库也可参考我另一篇博客:http://6738767.blog.51cto.com/6728767/1352239
查看默认密钥库里的条目:keytool -list -keystore C:\Users\xxxx\.keystore (这里通常是自己生成的密钥对,查看密码也是自己设的,忘了就看不了了)
查看jre里的默认密钥库条目:keytool -list -keystore C:\Java\jre1.8\lib\security\cacerts,默认密码是changeit。可以看到默认包含了100多个条目,当我们用java开发自己客户端访问https站点时,就需要在这个密钥库中包含对方的证书,否则会报错。导入方法也简单,见后。先说生成密钥对操作:
keytool -genkeypair -alias tomcat -keyalg RSA,第一个参数要输入tomcat启动绑定的域名(如cas.xx.com),也即客户端访问的域名。
当然为了不和其他密钥对混在一起,也可以单独生成一个tomcat专用文件:keytool -genkeypair -alias tomcat -keyalg RSA -keystore https.keystore
得到了这个https.keystore文件,把它放到某个目录下(假定为e:\keys),修改tomcat\conf\server.xml文件:
注释掉这一行:<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
取消注释并修改这一行:<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="e:/keys/https.keystore" keystorePass="123456"/>
重新启动tomcat,访问cas.xx.com:8443(本机),既可看到cas server部署好了。
三、修改cas server配置文件:deployerConfigContext.xml配置数据源、查询语句、提供的用户属性等设定。
四、cas server通常需要为多个应用服务的。如前所述,当这些应用使用java开发时,需要将证书导入到jre中,否则不能访问。要导入就需要先导出:
keytool -exportcert -alias tomcat -file cas.crt -storepass 123456,这样就得到一个证书文件cas.crt,里面包含了服务器的公钥。导入到jre的密钥库中:keytool -importcert -alias tomcat -file cas.crt -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit
五、消除浏览器访问此https站点的警告
将这个证书导入到本机信任列表里。方法:运行mmc ,添加/删除管理单元(M)... ,证书, 我的用户账户,受信任的根证书颁发机构。当然从浏览器导入也可以,但记得位置要放对(个人-受信任的根证书颁发机构)
题外:对于没有证书的别人https的站点,可用这个软件portecle导出证书,再导入到受信任列表里,也可以消除浏览器警告。