• 1. 单点登录专题讲师:张孝祥北京传智播客教育 www.itcast.cn
  • 2. Tip1:用Tomcat配置虚拟主机 浏览器访问WEB资源的过程分析 虚拟主机及实现原理 Tomcat体系结构 基于主机名的虚拟主机 北京传智播客教育 www.itcast.cn
  • 3. 浏览器访问WEB资源的过程分析URL 格式: http://主机名(或IP地址):端口号/目录名称/资源名称 举例: http://www.it315.org/book/java.html 思考: http://www.it315.org/book/java.html中的www.it315.org是代表一台计算机的地址,还是代表一个网站的地址呢?网站的地址与计算机的地址有什么关系和区别呢?一个计算机地址上对应多个网站地址,它们是一对多的关系!动手体验:用telnet程序分析浏览器访问WEB资源的过程 多学两招:打开telnet程序的本地回显功能 北京传智播客教育 www.itcast.cn
  • 4. 虚拟主机及实现原理 目的: 在一台计算机上创建多个WEB站点,并为每个WEB站点设置不同的主目录和虚拟子目录,每个WEB站点作为各自独立的网站分配给不同的公司或部门。 好处: 多个公司或部门的网站就可以共用同一台计算机,而用户感觉每个公司和部门都有各自独立的网站。多个没有实力在Internet上架设自己专用服务器的中小公司可以联合租用一台WEB服务器,对外提供各自的WEB服务而互不影响。 原理: WEB服务器上的每个WEB站点必须设置有不同的标识信息 WEB浏览器发出的连接和请求信息中包含WEB站点的标识信息 WEB站点的标识信息: IP地址、端口号、主机名北京传智播客教育 www.itcast.cn
  • 5. Tomcat体系结构 北京传智播客教育 www.itcast.cn
  • 6. 基于主机名的虚拟主机配置 请求消息2:GET / HTTP/1.1 Host: www.it.org …… server.xml文件设置请求消息1:GET / HTTP/1.1 Host: www.it315.org北京传智播客教育 www.itcast.cn
  • 7. 基于主机名的虚拟主机网络环境 动手体验:使用Tomcat建立基于主机名称的虚拟主机 WEB浏览器要访问基于主机名的虚拟主机时,在访问URL中必须采用主机名,而不能采用IP地址。 在整个网络系统中建立主机名与IP地址的映射关系,即必须将主机名添加到名称解析系统。 使用客户机本地的Hosts 文件,例如,c:\winnt\System32\Drivers\Etc\Hosts 使用DNS(Domain Name System,域名系统)服务器 北京传智播客教育 www.itcast.cn
  • 8. Tip2:为站点增加自动登录和单点登录功能自动登录的实现原理 Cookie技术回顾与分析 自动登陆的几种编码技术 自动登录处理流程的活动图 自动登录的编码实现 增加自动登录的安全性北京传智播客教育 www.itcast.cn
  • 9. 自动登录功能与实现原理需求分析 用户一旦使用浏览器登录某个站点和关闭浏览器后,在以后两个星期内,只要用户启动该浏览器访问该站点的任何页面时,都将自动完成登录。 很显然,该功能要求浏览器一旦登录以后的两个星期内,浏览器所在客户机上必须保留有用户帐号信息,并且,浏览器在以后设定的时间期限内访问该站点时,必须自动向服务器提交保留在客户机上的用户帐号信息。 实现原理 想一想:用什么样的Web技术可以实现这样的功能呢? 北京传智播客教育 www.itcast.cn
  • 10. Cookie的传送过程示意图 ①第一次访问不存在 Server1的Cookie ④写入Server1 的Cookie③第一次响应 Set-Cookie2: name=value ②第一次访问请求 WEB Server1 WEB Server2 浏览器 Server1 的Cookie Server2 的CookieCookie存储区 ⑤后续访问存在 Server1的Cookie ⑥后续访问请求 Cookie: name=value 北京传智播客教育 www.itcast.cn
  • 11. Set-Cookie2响应头字段Set-Cookie2头字段用于指定WEB服务器向客户端传送的Cookie内容,但是按照Netscape规范实现Cookie功能的WEB服务器,使用的是Set-Cookie头字段,两者的语法和作用类似。 Set-Cookie2头字段中设置的cookie内容是具有一定格式的字符串,它必须以Cookie的名称和设置值开头,格式为“名称=值”,后面可以加上0个或多个以分号(;)和空格分隔的其它可选属性,属性格式一般为“属性名=值”。 举例:Set-Cookie2: user=it315; Version=1; Path=/ 除了“名称=值”对必须位于最前面外,其它的可选属性的先后顺序可以任意。 Cookie的名称只能由普通的英文ASCII字符组成,浏览器不用关心和理解Cookie的值部分的意义和格式,只要WEB服务器能理解值部分的意义就行。 大多数现有的WEB服务器都是采用某种编码方式将值部分的内容编码成可打印的ASCII字符,RFC 2965规范中没有明确限定编码方式。北京传智播客教育 www.itcast.cn
  • 12. Set-Cookie2头字段中的属性 Comment=value Discard Domain=value 例如:Set-Cookie2: user=it315; Version=1; Path=/; Domain=.it315.org Max-Age=value Path=value Port[="portlist"] Secure Version=value 北京传智播客教育 www.itcast.cn
  • 13. 自动登录的几种编码技术模板方法设计模式 所有的Servlet或者Struts框架的Action采用模板方法设计模式进行设计,且要求所有的请求只能指向Servlet或者Struts框架的Action 自定义标签 在所有的JSP页面中都要加入自动登录的标签,且要求客户端的所有请求都只能指向JSP页面。 过滤器(Filter) 可以对指向各种资源的访问请求进行拦截,并附加实现自动登录功能,不要求对现有的Servlet和JSP进行任何改造,对以后编写的任何Servlet和JSP也没有特殊要求。过滤器(Filter)应该成为自动登录功能的首选编程技术。北京传智播客教育 www.itcast.cn
  • 14. 自动登录处理流程的数据状态与协作图北京传智播客教育 www.itcast.cn
  • 15. 自动登录处理流程的活动图北京传智播客教育 www.itcast.cn
  • 16. 增加自动登录的安全性保存在浏览器所在客户机上的信息必须尽可能的安全,即使被人窃取,也无法识别其中的信息。 Cookie值采用如下算法来生成: username + ":" + expiryTime + ":" + Md5Hex(username + ":" + expiryTime + ":" + password + ":" + key) 生成和解析Cookie值的算法是配对的,最好是放在同一个类中编写。北京传智播客教育 www.itcast.cn
  • 17. Tip3:单点登录单点登录的概念与功能 单点登录的两种解决方案 将自动登录程序扩展成同域内的单点登录系统 CAS服务器的工作原理 使用CAS服务器配置单点登录系统北京传智播客教育 www.itcast.cn
  • 18. 单点登录的概念与解决方案单点登录的概念与功能 单点登录的英文简称为SSO(single sign on),单点登录功能使得用户只要登录了其中一个系统,就可以访问其他相关系统,而不用进行身份验证登录。即用户只要登陆系统一次,该用户的身份信息就可以被系统中的多个主机上的应用所识别,不需要在访问每个应用时再分别进行登陆。 单点登录的两种解决方案 在某个域范围内的全局Cookie 例如:Set-Cookie2: user=it315; Version=1; Path=/; Domain=.it315.org 通过专用的代理服务器进行登录,如CAS和OpenSSO。 北京传智播客教育 www.itcast.cn
  • 19. 将自动登录程序扩展成单点登录系统建立两个具有相同域名的主机名和配置相应的虚拟主机。 设置自动登录程序的Cookie的domain属性: Set-Cookie2:name=xxxxx; path=/; domain=itcast.com 将Web应用发布到两个虚拟主机下,进行测试访问。 注销Cookie时,也必须按照生成该Cookie时的情况设置domain属性,浏览器才会真正注销这个Cookie。 问题:一个站点注销或重新登陆后,另外一个站点的信息不能随之改变。browserServer1Server2Server3bbs.itcast.commail.itcast.comblog.itcast.com北京传智播客教育 www.itcast.cn
  • 20. 通过代理服务器实现的SSOSSO ServerWeb Server1Browser③④⑦⑧⑨⑩①https://SSOServer/login?service=http%3A%2F%2FWebServer/visitingUrlhttp://WebServer/visitingUrl?ticket=xxxxxxxxxxxxxxxxxxx⑤⑥H T T P SHTTPS②AuthenticationFilterTicketValidationFilter 第(8)和第(9)步操作全部由其完成。Web Server2北京传智播客教育 www.itcast.cn
  • 21. 配置简单的CAS服务器配置三个站点www.it315.org、www.itcast.com、cas.itcast.cn 将下载的casclient demo分别发布成www.it315.org、www.itcast.com的根目录,将cas server中的webapp.war包发布成cas.itcast.cn的根目录。 需要将cas-client-3.1.10-release.zip中的cas-client-core-3.1.10.jar和commons-logging-1.1.jar加到casclient demo的lib目录中。 修改casclient demo的web.xml文件,根据当前的配置环境设置那些Filter的参数属性。注意:cas客户端请求cas服务器验证票据的地址暂时不要采用https协议。 测试访问,先看两个站点都需要登录,在第一个站点登录后,再次访问第二个站点,不用登录了。 刚开始CAS没有起作用,因为cas 服务器校验用户名后送出的TGC(Ticket Granting Cookie)标记了secure,所以,必须用https协议访问cas服务器时,才能回送cookie,这就要求casServerLoginUrl的地址必须是https协议。这个TGC的作用:当浏览器访问第二个站点时,第二个站点要求浏览器去找CAS服务器,此时浏览器就会回送先前收到的TGC,CAS服务器收到这个TGC后就不需要浏览器再登陆了。只要修改spring-configuration\ticketGrantingTicketCookieGenerator.xml文件,将其中p:cookieSecure="true"属性值改为false,这样casServerLoginUrl就可以不用https协议了。 北京传智播客教育 www.itcast.cn
  • 22. Single Sign outhttp://casserver/logout即可完成CAS Server的注销,但这只是注销了CAS Server,原来登录进的站点信息存入到了Cookie,所以,仍然可以用。 参看cas client帮助文档,其中有一个sing sing out的说明,配置一个Filter和一个Listener就可以了,建议读下其中的源码。 在demo webapp中已经配置好了上面的filter和Listener,只是暂时注释掉了。打开注释,注销掉cas服务器,可以看到Cas Client也随之注销了。 看Cas服务器帮助文档中的关于single sign out部分,进而知道要看ArgumentExtractor类的代码,再看到具体注销通知由org.jasig.cas.authentication.principal.AbstractWebApplicationService的logOutOfService方法生成发送,在eclipse中按Ctrl+H搜索但是谁来调用的这个方法,发现是TicketGrantingTicketImpl的expire方法。北京传智播客教育 www.itcast.cn
  • 23. 必须了解的Assertion类查看Assertion及AssertionImpl的源码,了解其中的方法。 查看AttributePrincipal及AttributePrincipalImpl的源码,了解其中的方法。 通过eclipse查找AssertionImpl类的构造方法被引用的地方,从而了解Assertion对象是如何被组装的。 CAS服务器验证完票据后,给CAS客户端返回的用户信息就是由 CredentialsToPrincipalResolver转换后的结果。如果自己要定制客户端获得的Assertion对象的AttributePrincipal属性对象返回的信息,例如,修改principalId的内容和在attritues集合中添加条目,这需要对服务器端的deployerConfigContext.xml文件进行配置,使用自己写的CredentialsToPrincipalResolver Bean。北京传智播客教育 www.itcast.cn
  • 24. 利用CAS整合多个系统的问题与方案问题与需求: A和B两个完全独立的系统分别有各自完全独立的用户管理,现在需要将这两个系统整合,不管是A系统中的帐户,还是B系统中的帐户,都只需要登录一次,就可以访问A和B系统的服务了。 如果一个人同时具有A和B系统的帐户,当他以A系统的帐户登录后,访问B系统时,B系统自动将它转换成本系统帐户再进行访问操作,反之亦然。 A和B系统整合后,不再单独提供新用户注册功能。新用户注册统一到中央认证管理系统中,新注册的用户可以同时访问A和B系统,例如,sina和sohu等网站的通行证注册就是这么回事。 解决步骤: 利用CAS提供统一的登录入口,还需要定制登录界面,让用户可以选择使用那个系统的帐户进行登录。 由于登录界面发生改变,请求参数增加了账号所在的系统名称,所以,登录凭据也不能继续使用UsernamePasswordCredentials,而是要自定义一个包含了系统名称的Credentials,并进行配置让CAS服务器启用这个自定义的Credentials。 编写对用户Credenticals凭据进行验证的AuthenticationHandler,这就需要在CAS中央数据库增加一个表,记录各个systemCode和原系统的名称、数据库地址,数据库接账号等信息的映射关系,以便AuthenticationHandler能够连接原来的数据库查询用户的账号信息。 编写自己定义的CredentialsToPrincipalResolver(修改前面讲解过的那个的即可),它通过Attribute方式向CAS客户端传递账号所在的系统和账号Id。 对原来的A系统和B系统进行改造,让系统可以跟踪是哪个系统的哪个用户进行的操作。 实现A和B系统帐户自动关联的功能。 实现系统整合后的通行证帐户功能。北京传智播客教育 www.itcast.cn
  • 25. CAS服务器在Portal系统中的代理应用Cas20ProxyReceivingTicketValidationFilter可以用于代理,这时候要设置proxyCallbackUrl和proxyReceptorUrl参数。proxyReceptorUrl必须满足requestUri.endsWith(),所以,不能包含webapp path部分。 proxyCallbackUrl为proxyReceptorUrl的绝对地址,CAS服务将调用这个地址,拦截此调用的Filter-Mapping应排在其他Filter之前。 Cas20ProxyReceivingTicketValidationFilter还可以用于被代理的应用,这时候要设置acceptAnyProxy参数,校验器就不是Cas20ServiceTicketValidator,而是Cas20ProxyTicketValidator,校验地址的后缀就不是serviceValidate,而是“proxyValidate”。 代理程序经上面第一个的Filter拦截后,得到的Assertion中已经有了PGT,它接着调用assertion.getPrincipal.getProxyTicketFor(目标服务的路径)获得要调用的目标服务的一个PT,再将这个PT附加在要访问的目标服务路径后对目标进行访问;目标服务程序经上面第二个Filter拦截并验证ticket后也将得到一个Assertion。BrowserSSO ServerWeb Server2Web Server1 (Portal) (Proxy)Web Server3北京传智播客教育 www.itcast.cn
  • 26. Tip4:为Tomcat配置Https协议功能一些基本的安全知识 Keytool工具的使用 SSL/TLS的工作原理 Tomcat的体系结构北京传智播客教育 www.itcast.cn
  • 27. 一些基本的安全知识数字摘要与MD5/SHA算法 作用:数据的完整性校验 对称加密与非对称加密 对称加密速度快,但加密和解密的钥匙必须相同,只有通信双方才能知道钥匙 非对称加密速度慢,加密和解密的钥匙不相同,某一个人持有私钥,任何人都可以知道公钥 问题:想让任何陌生人都可以与你进行加密数据的交换,且加密速度要快,如何实现呢? 数字签名 功能:必须能够验证内容没有修改,必须能够验证内容确实是被发送方签署 方案:发送方的公钥可以验证发送方签名的真实性,数字摘要可以验证内容没有修改 数字证书 问题:如何确认对方提供的公钥的真实性。 方案:每个人或机构的公钥和私钥由一些权威的机构产生!北京传智播客教育 www.itcast.cn
  • 28. 数字摘要的基本应用:数据的完整性校验北京传智播客教育 www.itcast.cn
  • 29. Keytool工具的使用KeyStore的介绍 存储多个私钥和其附带的数字证书 存储信任的第三方数字证书 KeyStore中的每一个私钥和信任的第三方数字证书用一个alias进行标识 Keytool的应用 产生私钥与导入第三方证书 导出证书与生成CSR(Certificate Signing Request)文件 修改KeyStore与其中存储项的密码 打印KeyStore与其中的存储项信息 删除KeyStore中的存储项北京传智播客教育 www.itcast.cn
  • 30. SSL/TLS的工作原理基本概念 SSL(Secure Socket Layer)是netscape公司设计的主要用于web的安全传输协议。这种协议在WEB上获得了广泛的应用。 IETF(www.ietf.org)将SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小。 基本原理:先非对称加密传递对称加密所要用的钥匙,然后双方用该钥匙对称加密和解米往来的数据。 工作过程 浏览器向服务器发出请求,询问对方支持的对称加密算法和非对称加密算法;服务器回应自己支持的算法。 浏览器选择双方都支持的加密算法,并请求服务器出示自己的证书;服务器回应自己的证书。 浏览器随机产生一个用于本次会话的对称加密的钥匙,并使用服务器证书中附带的公钥对该钥匙进行加密后传递给服务器;服务器为本次会话保持该对称加密的钥匙。第三方不知道服务器的私钥,即使截获了数据也无法解密。非对称加密让任何浏览器都可以与服务器进行加密会话。 浏览器使用对称加密的钥匙对请求消息加密后传送给服务器,服务器使用该对称加密的钥匙进行解密;服务器使用对称加密的钥匙对响应消息加密后传送给浏览器,浏览器使用该对称加密的钥匙进行解密。第三方不知道对称加密的钥匙,即使截获了数据也无法解密。对称加密提高了加密速度。 要求 服务器端需安装数字证书,用户可能需要确认证书。 会话过程中的加密与解密过程由浏览器与服务器自动完成,对用户完全透明。 北京传智播客教育 www.itcast.cn
  • 31. 为Tomcat配置SSL功能的实验步骤解决问题的思路: tomcat要支持SSL这种链接方式,只需要扩充安装一个支持SSL的Connector对象 客户端访问这个connector时,这个connector必须出示数字证书,这就需要先产生或获取证书,然后让连接器使用此证书。 实验步骤: 使用keytool创建或导入Web服务器所需要的证书。 修改server.xml文件,为Tomat增加一个支持SSL功能的连接器。取消其中对SSL连接器的注释,并根据安装的数字证书信息对一些参数进行调整即可。 编写一个用于检查访问协议是否是https的jsp程序,如果不是,则将请求重定向为https协议。北京传智播客教育 www.itcast.cn
  • 32. 配置使用Https协议的CAS服务器北京传智播客教育 www.itcast.cn