单点登录 SSO, 自动登录 , java 加密,ssl原理, Tomcat配置SSL
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha
单点登录的英文简称为SSO(single sign on),单点登录功能使得用户只要登录了其中一个系统,就可以访问其他相关系统,而不用进行身份验证登录。即用户只要登陆系统一次,该用户的身份信息就可以被系统中的多个主机上的应用所识别,不需要在访问每个应用时再分别进行登陆。
单点登录的两种解决方案
在某个域范围内的全局Cookie
例如:Set-Cookie2: user=it315; Version=1; Path=/; Domain=.it315.org
通过专用的代理服务器进行登录,如CAS和OpenSSO。
OpenSSO框架的源代码可以通过访问http://openSSO.dev.java.net获得,它提供安全身份管理的SSO功能,据说SUN的身份管理产品将基于OpenSSO。
将自动登录程序扩展成单点登录系统
建立两个具有相同域名的主机名和配置相应的虚拟主机。
设置自动登录程序的Cookie的domain属性:
Set-Cookie2:name=xxxxx; path=/; domain=han_meng_fei_sha.com
将Web应用发布到两个虚拟主机下,进行测试访问。
注销Cookie时,也必须按照生成该Cookie时的情况设置domain属性,浏览器才会真正注销这个Cookie。
问题:一个站点注销或重新登陆后,另外一个站点的信息不能随之改变。
======
数字摘要与MD5/SHA算法
作用:数据的完整性校验
对称加密与非对称加密
对称加密速度快,但加密和解密的钥匙必须相同,只有通信双方才能知道钥匙
非对称加密速度慢,加密和解密的钥匙不相同,某一个人持有私钥,任何人都可以知道公钥
问题:想让任何陌生人都可以与你进行加密数据的交换,且加密速度要快,如何实现呢?
数字签名
功能:必须能够验证内容没有修改,必须能够验证内容确实是被发送方签署
方案:发送方的公钥可以验证发送方签名的真实性,数字摘要可以验证内容没有修改
数字证书
问题:如何确认对方提供的公钥的真实性。
方案:每个人或机构的公钥和私钥由一些权威的机构产生!
md5算法可用于对一段信息进行不可逆的变换运算,产生一个128比特位的数字摘要。如果对输入信息作了任何形式的改变,对改变后的信息再次进行MD5运算所产生的数字摘要,与改变前的内容所运算出的MD5数字摘要都是不同的。MD5不是加密,因为结果是不能恢复出原始数据的。
KeyStore的介绍
存储多个私钥和其附带的数字证书
存储信任的第三方数字证书
KeyStore中的每一个私钥和信任的第三方数字证书用一个alias进行标识
Keytool的应用
产生私钥与导入第三方证书
导出证书与生成CSR(Certificate Signing Request)文件
修改KeyStore与其中存储项的密码
打印KeyStore与其中的存储项信息
删除KeyStore中的存储项
在jdk的keytool工具帮助页面中,搜索“keystore”和”cacerts”就可以知道key的默认存储位置和信任证书的存储位置。
在演示keytool时,先产生一个key,这时候要为新创建的keystore指定password,给大家看keystore文件的位置,然后再产生一个alias相同的key,
这时候必须先指定keystore的密码,才能进入该keystore,进入后报告alias重名的错误,然后删除该alias,再产生该alias的key。最后演示一下修改keystore的密码,进入keystore时就必须输入新密码了。
1. keytool -genkeypair (java6修改了以前的一些命令选项,所以,不能完全按tomcat的ssl部分的文档来做,另外,在命令后可以指定选项,也可以不指定选项,一些选项不指定,会采用对应的默认值,有些选项没有默认值,则会提示输入)
2. keytool -list 和keytool -list -v 看看keystore中有哪些项目。
SSL/TLS的工作原理
基本概念
SSL(Secure Socket Layer)是netscape公司设计的主要用于web的安全传输协议。这种协议在WEB上获得了广泛的应用。
IETF(www.ietf.org)将SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小。
基本原理:先非对称加密传递对称加密所要用的钥匙,然后双方用该钥匙对称加密和解米往来的数据。
工作过程
浏览器向服务器发出请求,询问对方支持的对称加密算法和非对称加密算法;服务器回应自己支持的算法。
浏览器选择双方都支持的加密算法,并请求服务器出示自己的证书;服务器回应自己的证书。
浏览器随机产生一个用于本次会话的对称加密的钥匙,并使用服务器证书中附带的公钥对该钥匙进行加密后传递给服务器;服务器为本次会话保持该对称加密的钥匙。第三方不知道服务器的私钥,即使截获了数据也无法解密。非对称加密让任何浏览器都可以与服务器进行加密会话。
浏览器使用对称加密的钥匙对请求消息加密后传送给服务器,服务器使用该对称加密的钥匙进行解密;服务器使用对称加密的钥匙对响应消息加密后传送给浏览器,浏览器使用该对称加密的钥匙进行解密。第三方不知道对称加密的钥匙,即使截获了数据也无法解密。对称加密提高了加密速度。
要求
服务器端需安装数字证书,用户可能需要确认证书。
会话过程中的加密与解密过程由浏览器与服务器自动完成,对用户完全透明。
使用keytool创建证书时,刚开始设置的用户名一定要是服务器的域名,否则,浏览器进行访问时也将提示证书有问题:
1.一种情况是发证机关是否值得信赖的,好比你拿出来的驾照是不是交管局这样的国家法定机构颁发的,还是你们村的村支书自己盖的章。
2.还有一种就是证书机构确实是交管局颁发的,但并不是发给你的,而是发给你老婆的,你出示你老婆的驾照时,人家交警会问,这是我们发的证,但是是发给你的吗?
讲课时,刚开始创建的证书的用户故意不给localhost,实验失败后,再将老的证书的名称修改为其他名称,接着再创建一个给localhost的新证书,并且证书别名用老证书的名称,这样,就不用修改服务器端的配置,但要重新启动服务器才能生效。
为Tomcat配置SSL功能的实验步骤
解决问题的思路:
tomcat要支持SSL这种链接方式,只需要扩充安装一个支持SSL的Connector对象
客户端访问这个connector时,这个connector必须出示数字证书,这就需要先产生或获取证书,然后让连接器使用此证书。
实验步骤:
使用keytool创建或导入Web服务器所需要的证书。
修改server.xml文件,为Tomat增加一个支持SSL功能的连接器。取消其中对SSL连接器的注释,并根据安装的数字证书信息对一些参数进行调整即可。
编写一个用于检查访问协议是否是https的jsp程序,如果不是,则将请求重定向为https协议。
直接打开tomcat的https连接器,根据报告的错误信息就知道keystore文件存储在哪里了?当然,这要求计算机上以前没有使用keytool工具创建默认的证书存储文件,这个默认文件为<当前登录用户的主目录>/.keystore,例如,C:\Documents and Settings\IBM\.keystore。
使用keytool为tomcat产生数字证书时,用户的姓名部分必须填写成tomcat服务器的主机名。
在tomcat5.5中,没有keyalias选项来指定用哪个证书,在tomcat 6.x开始,就多了一个选项来指定所用证书的名称了
使用浏览器进行访问时https://localhost:8443,千万别忘了使用https和正确的端口号,一不小心就写成了http和用错了端口号。
根据浏览器的提示,安装完证书后,关闭浏览器后,重新打开浏览器进行访问,就没问题了。
生成服务器端密钥:keytool -genkey -alias nlcdcas -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore
导出服务器端证书:keytool -export -alias nlcdcas -storepass changeit -file server.cer -keystore server.keystore
导入证书文件到cacerts 文件中:keytool -import -trustcacerts -alias server -file server.cer -keystore cacerts -storepass changeit