zoukankan      html  css  js  c++  java
  • 单点登录 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 SettingsIBM.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

  • 相关阅读:
    【BZOJ 2124】【CodeVS 1283】等差子序列
    【BZOJ 1036】【ZJOI 2008】树的统计Count
    【BZOJ 1901】【ZJU 2112】Dynamic Rankings
    【BZOJ 3924】【ZJOI 2015】幻想乡战略游戏
    【BZOJ 4103】【THUSC 2015】异或运算
    【BZOJ 4513】【SDOI 2016】储能表
    【HDU 3622】Bomb Game
    【BZOJ 3166】【HEOI 2013】Alo
    【BZOJ 3530】【SDOI 2014】数数
    【BZOJ 4567】【SCOI 2016】背单词
  • 原文地址:https://www.cnblogs.com/yue31313/p/7451948.html
Copyright © 2011-2022 走看看