前段时间是什么时候经常fjmhssl收视的,最进wwWfjmhsslcom怎么却无显示守页了

页面已拦截
无锡网警提示您:
该网址被大量用户举报,可能含有恶意信息。详述SSL和TLS的Web安全渗透测试_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
详述SSL和TLS的Web安全渗透测试
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
还剩5页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢全球最新的免费资源发布区
OpenShift推出收费业务和解决OpenShift空间打不开和SSH无法连接
& 日 17:22 &
今天收到了发过来的“OpenShift Online Silver Plan”邮件,OpenShift终于推出了付费空间的业务,我看一下Silver Plan,最多可以创建16个应用,每个应用是6GB,支持自定义SSL,内存最大是1GB,月付价格仅20美元。
OpenShift在推出自己的收费业务后,还是有良心的,不像国内的付费后来个豆豆玩意儿,也不像直接结束免费给点消费券了事,也没有像那样抠门似的注册给点免费限额,用完了就直接走人。
OpenShift在邮件已经说明了“Don't Worry, OpenShift is Still Free”,推出了付费服务后“nothing changes”,原来使用的OpenShift空间依然免费,可以创建三个应用,每个应用有512MB内存,支持PHP, Perl, Python, Ruby, Node.js, MySQL。
OpenShift免费套餐的限制是:15 pages/second,~ 50k visitors per month,Needs 3 small gears,可以理解为:最多15PV/s,有3个512MB内存的应用,月流量在50K以下。这样的配额已经超过了不少的付费虚拟主机了。
部落写过的那篇关于OpenShift空间文章评论已经快接近1500,上次有个朋友就抱怨了该页面最少要20S以上才可以打开。刚刚到部落论坛看一下,发现有一个朋友发帖子说要我再写一篇关于OpenShift空间的文章,我赶紧登录论坛回复。
吐槽一下的速度,论坛打开速度远没有别人的论坛快,想一想这也可能是导致论坛没有什么人发贴的原因吧,连我自己都快受不了了。看看为了论坛的长远发展,过一段时间将论坛搬家到日本机房看看。
如果你对和云VPS有兴趣,不妨试用这几个大牌公司的免费产品:
2、微软云空间:
3、亚马逊云VPS:
OpenShift推出收费业务和解决OpenShift空间打不开和SSH无法连接
一、OpenShift推出收费项目免费空间依然可供使用
1、OpenShift官网:
1、官网首页:https://openshift.redhat.com/
2、OpenShift免费付费套餐也不是很贵,20美元/月,经过部落测试,目前美国和加拿大可以购买,其它的国家应该在后续中被支持。
3、空间的老用户可以直接在账户中由免费升级为Silver Plan。
4、虽然OpenShift空间已经开始收费了(PS:实际上这是维持OpenShift空间继续免费下去的好事),但是OpenShift免费空间服务依然可以使用。
5、OpenShift免费服务可以创建3个应用,每个应用内存最大是512MB,容量是1GB,可以绑定域名,有PhpMyAdmin管理MysqL,支持PHP、Java、Python等等。
6、第一次用OpenShift空间,只要看下面三篇文章,就可以对OpenShift有深入的了解了:
1、申请使用:
2、SSH管理:
3、自助备份:
二、最新的在OpenShift空间上安装Wordpress
1、注册OpenShift空间账号,点击创建新的应用。
2、直接选择Wordpress应用,可以自动搭建好PHP环境和数据库。
3、设置一个二级域名。
4、点击创建应用后,稍等一会儿Wordpress就可以搭建完成,然后页面会显示MysqL数据库账号和密码,这与之前的显示Wordpress的管理密码不同。
5、打开OpenShift空间二级域名地址,填写Wordpress信息,完成Wordpress的安装。
6、这里虽然可以自己设置一个管理员密码,但是到最后OpenShift空间还是生成了一个Wordpress随机密码,这个随机密码会发送到邮箱中。
三、用PhpMyAdmin管理OpenShift空间的MysqL数据库
1、像上面我们已经在OpenShift空间搭建了MysqL数据库,而OpenShift为我们提供了免费的PhpMyAdmin来管理MysqL数据库,先添加PhpMyAdmin应用。
2、确认安装PhpMyAdmin。
3、然后会显示PhpMyAdmin的管理员账号和密码,这个和刚刚安装Wordpress后显示的是一样的,下方还有一个PhpMyAdmin登录页面。
4、打开PhpMyAdmin登录页面,输入账号和密码,就可以进入PhpMyAdmin管理中心了。
5、在这里就能看到我们正在使用的MysqL数据库了,有了PhpMyAdmin我们可以导出备份MysqL了。
四、最新的OpenShift空间绑定域名方法
1、之间介绍OpenShift空间绑定域名都是在rhc工具用命令的方式进行,现在OpenShift空间已经直接提供在页面中绑定自己的域名,OpenShift空间最后一个困难已经被扫除。
2、点击应用,然后在右上角的Aliases处有一个“+”号,点击它。
3、在这里输入你想要绑定的域名。
4、接着到域名的DNS管理处,给域名做一个CNAME记录,记录值是OpenShift空间二级域名。记住不要https://,看我的。
五、解决OpenShift空间打不开的问题
1、OpenShift空间打不开这已经是众人皆知的问题了,原因其实大家都已经心知肚明,不必多说,当前要解决的是让OpenShift空间搭建的网站可以在国内正常访问。
2、解决OpenShift空间打不开的问题方法比较老套了:用免费CDN。这里部落以作为演示,大家可以用免费CDN 来测试。
3、先在中添加是加速的域名,没使用过Incapsula的朋友,参考:。
4、稍等一会儿,待Incapsula检测完成后,点击下一步。
5、这时可以看到Incapsula给出了一个url地址,这个地址就是CNAME记录的记录值。
6、到你的域名DNS管理处,更新域名的CNAME记录,记录值就是刚刚Incapsula给出的URL。
7、用Incapsula设置好对OpenShift空间的加速后,十分钟后我们就可以正常访问OpenShift空间了。
六、解决OpenShift空间SSH无法连接的问题
1、OpenShift空间提供了免费服务,但是由于受OpenShift空间强大的影响力的影响,OpenShift空间的二级域名已经在国内无法打开了,这也导致了连接超时出现。
2、解决的办法就是将OpenShift空间二级域名地址换成服务器IP地址,这样可以避免因为域名无法打开而导致SSH无法连接的问题。
3、经过测试换成IP后,在部分地区可以正常使用OpenShift空间的SSH服务。
4、而在有些可能连服务器IP都已经被Q了,所以最彻底的解决办法就是挂D理吧。
PS:日更新,这里提供博主在使用OpenShift空间时遇到的一些问题,如果你也有同样的问题可以参考一下:
1、Openshift出现502、504错误,或者连接超时,官方的解释是:
当向您的应用程序发出请求时,您可能会看到这个错误:“Gateway Time-out. The server didn’t respond in time.“或”Bad Gateway…“
这些错误来自全球的Apache实例,因为它试图将请求路由到您的齿轮。这通常意味着你正在运行的交易已超时。超时设置在4分钟内,但可以/将改变我们调整我们的服务。
在一个多租户环境(PaaS环境)中,我们必须找到一个通过apache平衡服务多个应用程序路由,4分钟内作出回应,而不是只是一个应用程序,在30分钟内响应。 你的解决方法是写您的事务,使得它在一两分钟内响应。
2、Openshift空间在不使用SSH的情况重启应用
执行CMD,打开命令窗口,再执行以下命令(请把myapp换成你自己的应用名称):
rhc app force-stop myapp
rhc app start myapp
七、OpenShift空间申请和使用小结
1、参考以上方法,大家如果觉得空间慢的话,也可以尝试用免费CDN来加速,部落之前用过:
2、OpenShift空间走过了两年的开发期,现在终于有了收费服务,而OpenShift空间也越来越完善了,尤其是SSH服务,虽然有不少限制,但是已经可以和VPS相媲美了。
文章出自:
版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。
您或许对下面这些文章有兴趣:&&&&&&&&&&&&&&&&&&&&本月吐槽辛苦排行榜
免费资源部落博主
经常混迹于各种免费资源中,尝鲜后乐于分享给他人。用WP搭建了部落博客,没事儿就折腾Wordpress,喜欢找免费空间,但只求精,稳定,耐用。有时也会介绍一点关于建站的知识和主机、服务器的使用心得与体会。
TA的专栏:&&|&&
关于本文的作者
所属分类:
链接地址:
浏览前页:
浏览后页:
部落快速搜索栏
各类专题梳理
网站导航栏
免费资源重点推荐
最新文章推荐
部落最新评论列表
部落本月最受关注的热点
(热度2℃) (热度2℃) (热度2℃) (热度1℃) (热度1℃) (热度1℃) (热度1℃) (热度1℃) (热度1℃) (热度1℃) (热度1℃) (热度1℃) (热度1℃)
部落本月踩得最多的宝贝
(踩1,315次) (踩1,199次) (踩1,106次) (踩1,079次) (踩1,048次) (踩960次) (踩922次) (踩844次) (踩841次) (踩825次)
免费资源部落,是一个致力发布和推广来自世界各地的免费资源,包括多样实用的免费空间、各种优秀的免费软件、各样可用的免费网盘等个人博客网站。站长qi是一位很普通不过的人,长期关注网络空间、互联网、软件应用、程序开发与设计、网络应用等。免费资源部落成立的目的就是希望与更多人分享网络快乐与精彩!本站持续修改完善中,如遇不便还请谅解^_^ &&安全性加强的概述和方法
此内容是该系列 # 部分中的第 # 部分: WebSphere Application Server V7、V8 和 V8.5 中的高级安全性加强,第 1 部分https://www.ibm.com/developerworks/cn/views/global/libraryview.jsp?series_title_by=websphere+application+server+v7、v8+和+v8.5+中的高级安全性加强敬请期待该系列的后续内容。此内容是该系列的一部分:WebSphere Application Server V7、V8 和 V8.5 中的高级安全性加强,第 1 部分敬请期待该系列的后续内容。
免费下载:下载更多的 ,并加入 ,参与在线交流。简介IBM WebSphere Application Server 的安全性在每个版本中都有所改进。除了在新版本中增加了一些新功能之外,我们还不断增强产品的默认安全性。我们通过改进默认设置不断提高满足默认安全性这一关键原则的程度。 主要关注 WebSphere Application Server V6 和那个版本所需的加强步骤。在后续 WebSphere Application Server 版本中,显著减少了加强步骤的数量,更重要的是,保留的大多数步骤变得不那么关键了。 主要关注 WebSphere Application Server V6.1 以及针对 V7.0 的更新。因为 V6.1 与后续版本之间存在重大的差别,这些差别会使讨论复杂化,所有我们觉得从内容中删除 V6.1 的细节对更高版本的用户会有所帮助。现在,WebSphere Application Server 8.0 和 8.5 版已减少了必要的加强步骤,而增加的一些新功能会更改(或支持额外的)加强需求。因此,是时候用最新的信息来更新本文了。本文首先简单讨论安全性为什么如此重要以及加强系统的困难,然后讨论如何加强 WebSphere Application Server 环境来解决各种安全性漏洞。因为本文主要讨论加强,所以一些信息是概括性的,没有进行详细分析。我们尽可能提供相关详细信息的适当参考资料,让您能够进一步研究相关的子主题。尽管本文中的信息基于 IBM WebSphere Application Server V8.5 和 V8.0,但是讨论的大多数问题同样适用于 V7.0,但在某些情况下,WebSphere Application Server V8.0 对默认安全性设置进行了更改。对于某个版本特有的问题,我们会专门指出这些地方。随着时间的推移,我们对主要的 WebSphere Application Server 版本进行了产品更改,如果您使用的是 WebSphere Application Server V6 或更低版本,一定要参考 ,如果您使用的是 WebSphere Application Server V6.1,请参考 。配置文件备注如果熟悉 V8.5 之前的 WebSphere Application Server,您就会知道必须要创建一个或多个配置文件。该配置文件可能是一个 Application Server(或 Base)配置文件、一个 Deployment Manager 配置文件等。在本文的剩余部分中,这些配置文件将称为 “完整” 配置文件。进行这样的区分是为了将这些配置文件与 V8.5 中新增的配置文件(Liberty 配置文件)进行对比。本文还提供了特定于新的 Liberty 配置文件的一些建议。为什么需要安全性?令人欣慰的是,大多数读者都能够认识到安全性是企业系统的一个关键方面。尽管如此,为了介绍一些考虑安全性的常用方法,我们仍将简要介绍一下安全性。安全性的基本目的是 “阻止不怀好意的人进入您的系统”。更准确地说,安全性是一个过程,它应用多种技术来防止未经授权的用户(通常称为入侵者)对内容进行未经授权的访问。有许多类型的入侵者:外国间谍机构、竞争对手、黑客,甚至是您自己的雇员。每个入侵者都有不同的动机、不同的技能和知识、不同的访问入口以及不同的需求级别。例如:雇员可能对公司有攻击动机。雇员具有非常高的内部访问级别和系统知识水平,但他们的资源和黑客技能可能很有限。外部黑客也许是安全性攻击方面的专家,但是他们对您可能没有攻击动机。外国间谍机构可能对攻击您很感兴趣(这取决于您的业务)并拥有极其丰富的资源。入侵者可能出于两个原因入侵您的系统:为了获取他们本不该拥有的信息,或者为了以某种方式改变系统的正常行为。在后一种情况中,通过改变系统行为,他们可以尝试执行对其有利的事务,或者只是为了用某种有意思的方式导致系统崩溃,从而造成对您的组织的损害。关键在于,有很多不同类型的入侵者、很多不同的入侵动机以及(我们后面将会看的)许多不同的攻击类型。在规划安全性时,必须认识到这些。同时关注内部和外部威胁不应该仅将安全措施视为阻挡 “外人” 的大门。这是一种过于简单的观点。当前,许多组织将他们的安全措施完全集中在针对组织以外的人群,他们错误地认为只有外人才是危险的。实际上并非如此。对于大型公司,往往有数千人能够访问内部网络(其中许多人并不是雇员)。这些人都可能成为入侵者,而且由于他们在内部,所以他们访问网络会更方便。常常只需把笔记本电脑插上网线,就能够访问公司网络。一些研究表明,有将近一半的入侵是 。就算您相信网络中的每个人都是值得信任的,您能够相信他们永远不会犯错吗?考虑到通过电子邮件传播的病毒如此猖獗,而且基于 JavaScript™ 的攻击程序和其他程序很容易通过插入计算机的优盘和 CD 进入公司网络,从内部发起攻击,所以假设整个内部网络都是可信任的是一种鲁莽之举 —— 不能这样做。安全措施应该努力保护系统不被所有的潜在入侵者攻击,这就是本文为什么如此之长的原因。安全性不仅仅是在网络边界上保护系统不受 “外部” 攻击的防火墙。它是一组旨在尽可能地加强系统安全的复杂操作和过程。限制和现实状况应该认识到没有完全安全的系统,这一点很重要。您的目标是在业务的约束下尽可能地保护系统。在考虑安全性时,理想情况下应该:分析攻击的各个方面。考虑每种攻击的风险。确定攻击成功而导致安全性被破坏的可能性。评估为防止每种攻击所付出的代价。在估计安全性遭到破坏而造成的损失时,不要忘记安全性被破坏会导致系统用户对系统失去信心。因此,“安全性被破坏的代价” 可能包括非常高昂的间接代价(比如,失去投资者的信任)。一旦完成上面列出的步骤,就可以对风险与成本进行适当的权衡。从本质上说,目标就是要让入侵者为入侵系统而付出的代价超过他们可以获得的利益,同时确保业务能够承受运行安全系统所付出的代价(参见边栏)。归根结底,需要什么安全级别是一个业务决策,而不是技术决策。然而,作为技术人员,我们必须帮助所有各方理解安全性的价值和重要性。因此,除了保护内部应用程序免受攻击外,本文中建议的大多数安全性加强步骤的成本都相当低。大多数组织都应该都有能力实现它们。本文没有介绍比较复杂和昂贵的安全性方法 —— 强身份验证、审计和入侵检测等,它们超出了 WebSphere Application Server 产品功能的范围。安全性是一个很大的主题,本文不可能完全覆盖安全性的所有方面。本文不打算介绍安全性,或者说不是关于如何保护系统的教程。而是提供了涉及 WebSphere Application Server 安全性时需要考虑的核心技术问题的概述或检查表。本文中的信息应该与创建安全企业的更大型工作结合起来。希望了解更多信息的读者请查阅
部分。社会工程由于这是一篇技术性文章,因此将重点讨论保护系统的技术解决方案,具体地说,主要集中于安全性难题的 WebSphere Application Server 部分。尽管如此,您应该意识到,使用社会工程技术来危害系统往往更简单。也就是说,通过欺骗组织中的工作人员,攻击者可以获取权限,以不当地手段访问系统和信息。从社会工程攻击技术可以得出的一个结论是:通过使用社会工程,攻击者可能来自您的网络内部。这再次强调了前面提到的观点:仅仅防御来自网络外部的攻击者是远远不够的。因此,这里的讨论集中于多个级别的安全性。每个级别防范不同的攻击类型,并提供对攻击者更有效的屏障。总的系统观点:细节问题在详细研究具体建议之前,我们先花一些时间来概述创建安全系统的基础技术。基本观点是着眼于每个系统边界或共享点,检查哪些参与者访问了这些边界或共享的组件。也就是说,假设存在这些边界(假设子系统内部比较可信),那么入侵者如何突破这些边界呢?或者,假定某些东西是共享的,那么入侵者是否可以采用不正当手段共享某些东西呢?大多数边界是很明显的:网络连接、进程与进程的通信、文件系统、操作系统接口等等,但是有些边界不容易辨别。例如,如果一个应用程序使用了 WebSphere Application Server 中的 J2C 资源,那么必须考虑另一个应用程序试图访问这些资源的可能性。这是因为第一个应用程序和 WebSphere Application Server 之间以及第二个应用程序和 WebSphere Application Server 之间都存在系统边界。可能这两个应用程序都可以访问这个资源(实际上它们确实可以)。这可能是不合理的共享。要防止各种形式的攻击,可以应用许多众所周知的技术。对于较低层的基于网络的攻击,可以应用加密和网络过滤。这样就可以拒绝入侵者查看或访问他们不应该看到的内容。还可以依赖操作系统提供的机制来保护操作系统资源不被滥用。例如,不希望普通用户级代码能够访问系统总线和直接读取内部通信。还可以利用大多数现代操作系统,对系统 API 进行可靠地保护(参见边栏)。在较高层面上,应该严格应用身份验证和授权。每个 API、每个方法和每个资源都可能需要某种形式的授权。也就是说,必须根据需求严格地限制对这些东西的访问。当然,如果没有可靠的身份验证,授权也就失去了它的价值。身份验证所做的事情就是可靠地判断调用者的身份。这里增加了可靠 这个词,这是因为容易被伪造的身份验证是没有价值的。 如果无法进行适当的身份验证和授权,那么只能采用巧妙的设计和过程来防止潜在的问题。我们就用这种方式来保护 J2C 资源。由于 WebSphere Application Server 没有对访问 J2C 资源提供授权机制,我们只好应用其他技术来限制(基于配置)应用程序以不正当的方式访问 J2C 资源的能力。可以想像到,检查所有的系统边界和共享组件这一任务非常困难。此外,保护系统实际上需要充分考虑它的复杂性。关于安全性最困难的事情可能就是创建一个依靠抽象工作的安全系统。也就是说,良好抽象的原则之一就是,对更高层的组件隐藏所关注的问题。这正是人们所需要的一种非常好的做法。遗憾的是,入侵者并不友善。他们并不在乎抽象或者良好的设计。他们的目标是想尽办法入侵系统,所以他们会在您的设计中寻找漏洞。因此,为了验证系统的安全性,必须在每个抽象级别上考虑安全性:从最高的架构层到最低的详细实现层。尽管有许多应用程序扫描工具可以帮助检查代码(比如 IBM ),但是即使使用扫描工具,仍然需要对所有代码和设计决策进行手工检查,以防止应用程序受到攻击。需要对所有的内容进行严格的检查。最小的错误也可能破坏整个系统的完整性。使用缓冲区溢出技术来控制基于 C/C++ 的系统就是这方面的最好例证。本质上,入侵者会传递一个大于现有缓冲区的字符串。因此,多出的信息会覆盖正在运行的程序的一部分,导致运行时执行本不应该执行的指令。请注意,通过这种方法,。作为安全架构师,要想识别这种攻击,就必须深入理解 C/C++ 运行时如何管理内存并执行在运行的程序。即使您了解到缓冲区溢出问题的存在,仍然必须检查每一行代码,以发现此漏洞。目前,我们已经了解了这种攻击,但是它仍然能够获得成功,这是因为个别程序员制定了非常小的错误决策,该决策会危及整个系统的安全。幸运的是,这种攻击在
Java™ 中不奏效,但是其他小错误仍然可能导致系统受到威胁。要对安全性进行认真的考虑;这是很难的。安全性加强概述J2EE 规范和 WebSphere Application Server 提供了一种用于实现安全系统的强大的基础架构。遗憾的是,许多人没有意识到创建基于 WebSphere Application Server 的安全系统的各种相关问题。这些信息有许多自由度和许多不同的来源,所以一些用户往往会忽视安全性问题,部署的系统不够安全。为了避免这种情况,本节对最关键的问题进行了总结。安全性加强指的是通过配置 WebSphere Application Server、开发应用程序和配置其他各种相关组件,尽可能地提高安全性——实际上是防止、阻碍或减轻各种形式的攻击。要使安全性得到有效加强,了解攻击的形式非常重要。攻击应用服务器有四种基本方法:基于网络的攻击:这些攻击依赖于对网络数据包的低层访问,试图通过修改通信流或者发现这些数据包中的信息来危害系统。基于计算机的攻击:在这种情况下,入侵者已经可以访问运行 WebSphere Application Server 的计算机。对于这种情况,我们的目标是限制入侵者损害配置或者看到不应该看到的内容的能力。基于应用程序的外部攻击:在这种情况下,入侵者使用应用级的协议(HTTP、IIOP、JMX、Web 服务等)来访问应用程序,可能通过 Web 浏览器或者其他类型的客户端来实现该访问。入侵者使用这种访问方式来试图超越应用程序的正常使用方法,做一些不正当的事情。关键是入侵者会使用定义良好的 API 和协议来进行攻击。入侵者并不一定在公司外部,而是从应用程序自身的外部执行代码。这些攻击类型是最危险的,因为它们需要的技能往往很少,并且只要有可用的 IP 连接,就可以从很远的地方实施攻击。基于应用程序的内部攻击(也称为应用程序隔离):在这种情况下,我们关心的是恶意应用程序的危害性。在这种情况下,多个应用程序共享相同的 WebSphere Application Server 基础架构,我们不能完全信任每一个应用程序。为了帮助您将保护技术与这些攻击类别联系起来,每种技术使用以下图形代表这些漏洞:N:基于网络的攻击M:基于计算机的攻击E:基于应用程序的外部攻击I:基于应用程序的内部攻击对于每种技术,可以使用适当的方块将加上底纹,这指出了该技术有助于防范的攻击类型。请记住,内部应用程序总是可以利用外部攻击方法进行攻击。因此,当已经标出 E(外部)时,就不会再明确地标出 I(内部)。请注意,这里没有考虑另一种技术攻击形式:拒绝服务 (Denial of Service, DoS) 攻击。尽管它很重要,但是 DoS 攻击超出了本文的范围。防范 DoS 攻击需要完全不同的技术,这超出了应用服务器所能提供的范围。为了防范 DoS 攻击,需要考虑网络通信量监视器、速率限制器和入侵检测工具等。加强方法我们来讨论一下保护 WebSphere Application Server 基础架构和应用程序免受这四种形式的攻击时应该采取的各种已知的步骤。(这里说 “已知的” 步骤当然是因为可能还有其他漏洞没有被发现。)理想的情况下,可以将这些信息分成四个部分,每个部分对应于一种形式的攻击。遗憾的是,攻击并不完全按照这种界线来划分。有几种不同的保护技术可以防范多种形式的攻击,而有时一次攻击可能利用多种入侵形式来达到最终目标。例如,在最简单的情况下,网络嗅探能够用于获取密码,然后这些密码可以用于进行应用级攻击。因而,根据活动发生的时间或问题相关人员的角色,我们可以将安全加强技术组织成符合逻辑的结构:基础架构:为了通过配置 WebSphere Application Server 基础架构尽可能地提高安全性而采取的措施。当基础架构已经构建完成并且仅涉及系统管理员时,通常会采取这些措施。应用程序配置:应用程序开发人员和管理员所采取的措施,这些操作在部署过程中是可见的。本质上,这些是应用程序设计和实现决策,它们对 WebSphere Application Server 管理员可见,并且可以在部署过程中检验(可能有一些难度)。这一部分将介绍大量技术,以便进一步加强安全性的不足之处;安全性是每个参与应用程序设计、开发和部署的人员的责任。应用程序设计和实现:开发人员和设计人员在开发期间所采取的对安全性至关重要的举措,但是这些措施对部署过程可能没有影响。应用程序隔离:这将单独进行详细讨论,因为它涉及到的问题比较复杂。在每个部分中,将按优先级顺序排列各种技术。当然,优先级是主观的,但是我们会尝试使用这种方法大致确定每个领域中所受威胁的优先级:基于计算机的威胁比网络威胁的可能性小,因为生产环境中的计算机通常是限制访问的。如果您的环境中没有限制访问,那么这些威胁很有可能会出现,您首先应该限制对这些计算机的访问。最严重的攻击是只使用 IP 连接进行的远程攻击。这意味着所有通信都必须是经过身份验证的。要保护通信流,应该对其进行加密,但对 WebSphere Application Server 内部通信流进行加密不如对出入 WebSphere Application Server 的通信流进行加密那么重要。这是因为后一种通信流可能会穿越更多的节点,黑客可以在这些节点上窥探通信流。SSL/TLS 概述SSL/TLS(后面统称为 SSL)是 WebSphere Application Server 安全性架构的一个关键组件,广泛用于安全通信。SSL 用于保护 HTTP 通信流、IIOP 通信流、LDAP 通信流、MQ 通信流、JDBC 通信流、WebSphere 消息引擎之间通过 SIBus 传输的消息流、J2C 和 SOAP 通信流。SSL 需要使用公钥/私钥对,对于 WebSphere Application Server,这些密钥存储在密钥存储库中。因为 SSL 对于保护基础架构具有重要作用,所以我们暂时离开本文的主线,介绍 SSL 的一些与 WebSphere Application Server 相关的重要方面。(本文特意做了简单介绍,只讨论正确配置 SSL 所需的关键点。)公钥密码术 (Public Key Cryptography) 从根本上讲是基于公钥/私钥对的。这两个密钥在密码学意义上是相关联的。关键的问题是这些密钥是非对称的;使用一个密钥加密的信息可以使用另一个密钥来解密。私钥自然是私有的。也就是说,您必须始终保护私钥。如果其他任何人能够访问私钥,那么接下来他们就可以用该私钥来 “证明” 其身份,并以您的名义进行活动;私钥很像密码,只是更安全,更改比较困难。持有私钥就是身份的证明。公钥是密钥对的一部分,它可以与其他人分享。只要有一种安全的方法可以将公钥分发给各方,这就足够了。由于没有这样一种全球公认的技术,所以公钥密码术引入了签名公钥的概念。签名公钥有数字签名(非常类似于人工签名)来表明签署者对公钥的担保。签署者保证与签名公钥相对应的私钥持有者就是由密钥识别的群体。这些签名公钥被称为证书。众所周知的签署者被称为证书授权方 (CA)。也可以使用相应的私钥签署公钥。这些被称为自签名 (self-signed) 证书。自签名证书的安全性不亚于由证书授权方签署的证书,只是乍看起来,它们显得不易于管理。图 1 显示了使用 CA 创建和分发证书的基本过程;对于本例,证书用于通过 SSL 执行服务器身份验证。也就是说,服务器持有一个证书,用于向客户端表明其身份。客户端不持有证书,因此对 SSL 是匿名的。在通过配置客户端让其信任 CA 颁发的所有证书之前,提前执行第 1-3 步。第 4-6 步提前在服务器上执行,使它能够在客户端中利用这种 CA 信任关系。当客户端启动一个对服务器的连接时,将执行第 7 步和第 8 步。图 1. 服务器 SSL 身份验证:证书创建和分发在查看此图时,请注意客户端必须持有签署服务器生成的公钥所用的证书。这是信任的关键部分。由于客户端信任它拥有的任何证书(在本例中包括 CA 证书),所以它信任 CA 签署的所有有效的证书。证明可能包括确保发放者是受信任的(如图 1 所示),检查证书是否过期(超过有效期),检查证书中定义的用途是否与它的实际用途匹配,以及检查证书是否已被撤销。我们使用一种类比法来解释证明与验证之间的区别,可将证书想象为驾驶员的驾照。它们由各个省/州/国家发放。官员可通过检查发放国家(它是否一个受信任的省/州/国家?)来验证驾驶员的驾照,确认它没有被篡改(数字签名证明类似于物理检查),检查它是否过期,验证性别是否与持有人相符,持有人是否正将验证驾照用于与之对应的车辆类型(性别和类型:汽车、摩托车和卡车类似于证书扩展属性),最后检查持有人是否拥有未结算的支付款,类似于撤销检查。另一方面,验证驾驶员驾照是为了确认驾照上的照片(身份)与使用它的人相符。值得注意的是,如果使用自签名证书,则需要手工地将这些自签名证书分发到每个客户端,而不是依靠可能已经在客户端中构建的众所周知的 CA 证书。这并非不安全,但是,如果有许多客户端,则需要将所有这些签名证书(每个服务器对应一个)分发到所有客户端,这会变得非常难以管理。只分发一个签署了许多证书的 CA 证书要容易得多;这些 CA 证书通常具有更长的寿命,客户端应用程序(比如浏览器)通常会在过期之前自动推出更新或替换证书。信任强大的 CA 颁发的所有证书有一个重大缺陷。如果某个 CA 遭到破坏,那么很可能会导致严重的信任损失。2011 年,一家为大约 25% 的互联网站颁发证书的 CA (Comodo) 遭到攻击,此 CA 颁发的证书现在已值得怀疑。另一家 CA (Diginotar) 也遭到攻击,这导致该公司关闭;Diginotar 使用的所有证书现在已毫无用处。对于使用 SSL 的服务器身份验证来说更是如此。在完成最初的握手阶段之后,SSL 实际上将改为使用在握手期间生成的机密密钥执行加密,通过这种方法保护通信通道,但具体的细节与本文无关。当客户端向服务器验证其自身的身份时,虽然角色相反,但过程与此相似。为了让服务器对客户端进行身份验证(这通常称为客户端证书身份验证,在与服务器身份验证一起使用时称为双向 SSL 或 Mutual SSL),客户端必须持有一个私钥和相应的证书,而服务器必须持有相应的签名证书或客户端证书的副本。这对于它来说是举手之劳。请注意哪些内容是不必要的:SSL 证书身份验证仅确定证书的有效性,不会验证该证书代表谁。验证是 SSL 后处理的责任。这有着重要的意义,稍后我们将会看到。总之,因为 SSL 使用证书身份验证,所以 SSL 连接的每一端都必须在密钥存储文件中持有适当的密钥。在配置 SSL 密钥存储库时,需要考虑哪一群体需要遵守哪些密钥的基本规则。通常,这会让您知道自己需要什么。只使用 SSL 限制访问正如刚刚提到的,一旦 SSL 检验过证书,从 SSL 的角度来看,身份验证过程已经结束了。接下来理想的情况应该是让另一个组件查看证书中的身份,然后使用该身份制定授权决策。授权决策可以是让客户端确认服务器是可信的(Web 浏览器只要核实证书中的名称与 Web 服务器的主机名称相同,就可以确认服务器是可信的),也可以是让服务器提取用户名,然后使用它为以后的授权决策创建证书(WebSphere Application Server 在对用户进行身份验证时采取的就是这种方式)。遗憾的是,并非所有的系统都有这样的功能。对于这样的系统,可以利用流行的 SSL 技巧:限制有效的证书。在前面涉及客户端身份验证的场景中,客户端提供了一个证书,然后服务器可以根据可信的证书签署者集对其进行检验。一旦检验通过,SSL 握手就完成了。如果限制服务器上可信的签署者,就可以限制谁能完成 SSL 握手。在自签名证书的极端情况下,可以创建只有一个签署者的情形:只有一份自签名证书。这意味着只有一个有效的客户端私钥可以用于连接此 SSL 端点:即在创建自签名证书时生成的私钥。通过这种方式可以轻松地限制谁能通过 SSL 连接到系统,即使服务器端组件不提供授权。可以将这看作是在网络层上创建安全的可信隧道。我将此理念称为 “SSL 隧道技巧”。假设一切都已正确配置完成,那么只有特定的可信客户端才可以通过这一通道建立连接。这在 WebSphere Application Server 中的几种情况下非常有用,这一点我们后面将会讨论。管理 SSL正如我们已经看到的,WebSphere Application Server 在密钥存储文件中管理密钥。有两种类型的密钥文件:密钥存储库和信任存储库。根据约定,信任存储库只不过是仅包含可信签署者的密钥存储库。因此,应该将 CA 证书和其他签名证书放入信任存储库中,并将私有信息(包含私钥的个人证书)放入密钥存储库中。遗憾的是,这个简单的系统存在一个问题。大多数 WebSphere Application Server 都使用 PKCS12 格式。(事实上,WebSphere Application Server SSL 配置支持三种现代密钥数据库格式:JKS、JCEKS 和 PKCS12。)IBM HTTP Server 和 WebSphere Application Server Web 服务器插件使用了一种比较老的密钥格式,KDB 格式(更准确地说是 CMS 格式)。这两种格式在功能上相似,但在格式上不兼容。因此,必须注意不能将它们弄混。WebSphere Application Server SSL 配置从 WebSphere Application Server V6.1 开始,产品中为
提供了健壮的基础架构。本文的其余部分假设您熟悉这些基础架构。加强 WebSphere Application ServerWebSphere Application Server V6.1 和更高版本的设计原则是遵守默认情况下的安全性的安全性原则。尽管这个目标尚未完美实现,但已经针对该目标发布了一个产品,在大多数常见的配置环境和更简单的环境中,该产品默认情况下具有合理的安全水平。显然,复杂的环境会产生难以预料到的独特问题,但是对于比较简单的环境,我们的目标是让默认的安装和配置能够提供合理的系统安全水平;没有完全安全的系统,因为这样的东西是不可能存在的。我们也不会试图消除每个漏洞,因为许多漏洞的风险很小,而且在默认情况下封闭它们会显著增加应用程序开发、管理或兼容性的复杂程度。但是,如果我们认为,对于大多数客户端,可以采用某种方式合理地消除某个漏洞,我们就是会怎样做的。管理安全和 Liberty 配置文件第一次(或者可能第二次)查看 Liberty 配置文件时,您可能会注意到,我们没有启用管理安全。WebSphere Application Server 产品在以前的版本中竭尽全力从默认不安全模式改进为默认安全模型(从 V6.1 开始)。乍看起来,Liberty 配置文件安全状态看起来可能是一大退步。但是,Liberty 配置文件与完整配置文件(Base 和 Network Deployment)之间存在着一项重要、关键的区别。完整的 WebSphere Application Server 配置文件被设计为通过管理控制台、wsadmin、JMS 访问和一个完整配置文件中存在的各种服务器间通信路径进行远程管理。V8.5 Liberty 配置文件管理模型基于运行配置文件的服务器上的文件的 OS 级读/写访问(请注意,如果您拥有对完整 WebSphere Application Server 配置文件的类似的 OS 级访问权,那么您会拥有单元的总体管理控制权;通过编辑 security.xml 文件,可以更改其他所有设置)。通过添加一个 JMX 连接器功能,可以启用 Liberty 配置文件中的远程管理访问:localConnector-1.0 功能要求 JMX 客户端应用程序在同一个主机上使用同一个 OS 用户 ID 运行。可启用 restConnector-1.0 功能,让 JMX 客户端能够远程访问服务器。在启用 restConnector-1.0 功能时,ssl-1.0 和 appSecurity-1.0 功能都会动态启用,以确保远程访问是默认安全的,这类似于完整配置文件。此外,当启用其中一个连接器时,必须向 Liberty 配置文件配置中添加一个管理用户,否则连接器无法验证和连接 Liberty。基于基础架构的预防措施在保护基础架构时,首先必须了解要保护的组件。与任何漏洞分析一样,我们从确定组件及其外部通信路径开始。(这一分析不会揭示内部应用程序漏洞,但会揭示其他大多数漏洞。)这有助于检查标准的 WebSphere Application Server 拓扑(完整配置文件),并了解所有网络链接和协议(参见图 2)。方框中带阴影的项是与 Liberty 配置文件相关的组件。作为关注安全性的人员,您需要了解所有这些链接并专注于保护它们。这些链接代表前面提到的粗粒度系统边界。图 2. 网络链接图在图 2 中,链接上的字母表示在那些通信链接上使用的协议。对于每个协议,我们列出了其用途,并提供了一些关于防火墙友好性的信息,因为这对于后面的讨论十分重要。协议如下:H = HTTP 通信流
用途:浏览至 Web 服务器、从 Web 服务器到应用服务器的通信以及管理 Web 客户端。防火墙友好。W= WebSphere Application Server 内部通信
用途:管理客户端和 WebSphere Application Server 内部服务器管理通信流。WebSphere Application Server 内部通信使用以下几种协议之一:
RMI/IIOP 或 SOAP/HTTP:管理客户端协议是可配置的。文件传输服务(dmgr 到节点代理):使用 HTTP(S)。DCS (Distributed Consistency Service):使用专有协议。用于内存到内存复制、有状态会话 EJB、动态缓存和高可用性管理器。SOAP/HTTP 防火墙友好。DCS 可以是防火墙友好的。I = RMI/IIOP 通信
用途:EJB 客户端(独立的客户端和 Web 容器)。由于使用了动态端口和嵌入式 IP 地址(这会影响防火墙执行网络地址转换),所以通常防火墙对其不太友好。M = SIB 消息传递协议
用途:从 JMS 客户端到消息传递引擎的通信。协议:专有协议。防火墙友好,因为可以指定使用的端口。防火墙很可能对 NAT 不友好。MQ = WebSphere MQ 协议
用途:MQ 客户端(实际客户端和应用服务器)。协议:专有协议。防火墙可用(有大量端口可供考虑)。请参阅 WebSphere MQ support pac MA86。L = LDAP 通信
用途:WebSphere Application Server 对注册表中的用户信息进行验证。协议:按照 LDAP RFC 中的定义进行格式化的 TCP 流。防火墙友好。J = 通过厂商 JDBC 驱动程序进行的 JDBC 数据库通信
用途:应用程序 JDBC 访问和 WebSphere Application Server 会话数据库访问。协议:每个数据库专有的网络协议。防火墙方面取决于数据库(通常是防火墙友好的)。S = SOAP
用途:SOAP 客户端。协议:通常为 SOAP/HTTP。当使用 SOAP/HTTP 时防火墙友好。如图 2 所示,典型的 WebSphere Application Server 配置有大量网络链接。WebSphere Application Server V8.5 包含按需路由器 (ODR),以前仅在 IBM WebSphere eXtreme Scale 中提供。ODR 引入了一些必须考虑的新网络链接。尽可能地保护每个链接上的通信流以防范入侵者,这是非常重要的。在这部分剩下的内容中,将讨论保护刚刚描述的基础架构所需的步骤。下面的列表按优先级次序列出每个步骤。最重要(最关键)的措施列在最前面。靠后的措施重要性逐渐降低。由您决定您的组织应该完成这个列表中的哪些措施。1.
将 Web 服务器放在 DMZ 中,但是不放置 WebSphere Application ServerDMZ(参见边栏)有三个基本原则需要考虑:来自外部的入站网络通信流必须终止于 DMZ 中。网络传输负载平衡器(例如 Network Dispatcher)自身并不满足这个要求。从 DMZ 到内部网的通信流类型和开放端口数量必须进行限制。必须对在 DMZ 中运行的组件进行加强,并遵循最少功能和最低复杂度的原则。因此,一般将 Web 服务器放在 DMZ 中,将 WebSphere Application Server 应用服务器放在内部防火墙内。这种做法比较理想,因为这可以使 Web 服务器具有非常简单的配置,需要的软件也很少。DMZ 的另一个作用是终止入站请求。最后,内部防火墙上必须开放的惟一端口是用于目标应用服务器的 HTTP(S) 端口。这些步骤使 DMZ 对攻击者的防范非常严格。如果愿意,也可以把安全的代理服务器放在 DMZ 中,替代 Web 服务器或与 Web 服务器共存。如果把 WebSphere Application Server 放在 DMZ 中的计算机上,则必须在那些计算机上安装更多的软件,并且必须在内部防火墙上开放更多的端口,使 WebSphere Application Server 可以访问生产网络。这极大地降低了 DMZ 的价值。可以在 DMZ 中放置 Web 服务器以外的其他组件。将安全代理放在 DMZ 中也是合理的,比如 IBM Tivoli® Access Manager WebSEAL、WebSphere Application Server V7 安全代理或 IBM WebSphere DataPower® 等加强了安全保护的组件。关键是放在 DMZ 中的组件不能是复杂的应用服务器,必须加强安全保护,还必须终止入站连接。2. 将生产网络与内部网隔离开现在,大多数组织都了解 DMZ 将 Internet 上的外人与内部网隔离开的价值。然而,很多组织没有意识到许多入侵者都来自内部。正如前面所提到的,需要同时防范来自内部和外部的威胁。正如保护自己免受来自大量不可信的 Internet 用户的攻击一样,您还应该保护生产系统免受大量不可信的内部网用户的攻击。可以使用防火墙将生产网络与内部网络隔离开。这些防火墙看似比面向 Internet 的防火墙随意得多,但仍然能够防御许多形式的攻击。通过应用这一步骤和前一步骤,应该可以建立图 3 所示的防火墙拓扑。(有关 WebSphere Application Server 防火墙端口分配的更多信息,请参阅 。)请注意,我们在防火墙的边缘放置了 wsadmin。这样做是为了试图说明,虽然最好只在生产网络中(受保护的区域内)运行 wsadmin,但也可以将 wsadmin 访问限制为与管理员桌面对应的特定地址,从而轻松地穿过防火墙访问 wsadmin。图 3 还在边缘上显示了 EJB 客户端,因为它们可能位于防火墙的任意一侧。图 3. 推荐的防火墙配置这里只显示了单个防火墙,并没有显示面向内部网的整个 DMZ,因为这是最常见的拓扑。但是,完整的 DMZ(以及内部 DMZ 中的 Web 服务器)越来越常见,它们保护生产网络免受来自非生产内部网的攻击。这的确是一种合理的方法。如果使用按需路由器功能,请查看下一个加强技巧。3. 不要将 ODR 放在 DMZ 中 WebSphere Application Server V8.5 包含按需路由器 (ODR),以前仅在 WebSphere eXtreme Scale 中提供。ODR 是一个基于 Java 的系统,具有上一个主题中提及的所有问题。使用 ODR 的安全拓扑如图 4 所示。而且,。图 4. 按需路由器放置图 4 显示了基于 Java 的 ODR 服务器的放置,这与 IBM DataPower SOA Appliances 的应用程序优化 (AO) 功能所提供的按需路由功能截然不同。尽管 Java ODR 不应放在 DMZ 中,但 DataPower SOA 设备是一个适合放在 DMZ 中的加强的设备。4. 对浏览器访问使用 HTTPS如果站点要执行任何身份验证或者有任何应该保护的活动,则需要对从浏览器到 Web 服务器的访问使用 HTTPS。如果不使用 HTTPS,那么密码、用户活动、WebSphere Application Server 会话 cookie 和 LTPA 安全令牌(参见边栏)等信息可能被入侵者看到,因为通信流要穿过外部网络。对于在执行身份验证之前允许 HTTP 通信流的应用程序,一定要密切注意 cookie。如果某个 cookie(比如 JSESSIONID)是在使用 HTTPS 之前设置的,那么在使用 HTTPS 之后,该 cookie 可能带来风险,因为入侵者可能已经修改或捕获了它。这正是 WebSphere Application Server 对经过身份验证的用户使用单独的 cookie 的原因。另一种更狡猾的攻击方式是,入侵者可以修改通过 HTTP 返回的任何页面——甚至包括页面中嵌入的 URL。因此,用户可能会单击页面上看似安全的 URL,但他实际上会被转到入侵者的站点上。5. 保持补丁和修复最新与其他复杂产品一样,IBM 会不时地发现和修复 WebSphere Application Server、IBM HTTP Server 和其他产品中的安全性 bug。保持这些修复最新非常重要。建议订阅您使用的产品的支持公告板,对于 WebSphere Application Server,需要经常访问您的版本的 。这些公告板常常包含最近发现的安全性 bug 和修复通知。可以肯定的是,潜在的入侵者会很快得知那些安全性漏洞。您越早采取行动越好。在
页面上,可以找到关于 WebSphere Application Server 安全性的一般性信息,包括对加强 WebSphere Application Server 基础架构的建议。6. 启用应用程序安全性在默认情况下,WebSphere Application Server 完整配置文件的定义中启用了管理安全性。因此,在大多数情况下,基础架构会在默认情况下为管理通信流提供合理的身份验证、授权和加密。在启用管理安全性时,部署管理器和应用服务器之间的 WebSphere Application Server 内部链接以及从管理客户端(Web 和命令行)到部署管理器的通信流是经过加密和身份验证的(参见图 3)。这意味着,在运行管理工具时,需要对管理员进行身份验证。后面会讨论一些例外情况。除了在管理方面利用应用服务器的安全性之外,强烈建议在应用程序安全性方面利用它。这样做可以让应用程序能够访问强大、健壮且基于标准的安全基础架构。在没有利用应用服务器安全性的应用程序中,常常会发现很严重的安全性漏洞。设计和实现安全的分布式基础架构并不容易。要想启用应用程序安全性,应该进入全局安全性面板,并选择 Enable application security(不需要启用 Java 2 安全性;正如后面讨论的,它通常不适用),参见图 6。图 5. 应用程序安全性在 V8.5 Liberty 配置文件中,通过将清单 1 中所示的元素包含在配置文件的 server.xml 文件中来启用应用程序安全性。清单 1. 在 Liberty 中启用应用程序安全性&featureManager&
&feature&appSecurity-1.0&/feature&
&/featureManager&警告:仅仅启用应用程序安全性并不能确保应用程序是安全的。这只是让应用程序能够利用应用服务器提供的安全特性(包括 Java EE 安全性)。后面会进一步讨论这个主题。7. 使用 ldapRegistry 代替 quickStartSecurity 或 basicRegistry 元素Liberty 配置文件在设计时采用了极简理念。为了给希望测试其应用程序是否兼容安全性的开发人员提供轻松支持,可以使用一个包含单个用户 ID 和密码的 quickStartSecurity 注册表。basicRegistry 允许定义多个用户和组。这两个安全注册表都包含在 server.xml 内。上述两个简单的注册表在开发人员的个人环境中已经够用。在测试环境外,这些 Liberty 配置文件应配置为使用 ldapRegistry 功能。8. 限制对 WebSphere MQ 消息传递的访问如果使用 WebSphere MQ 作为消息传递提供者,则需要通过其他技术来提供队列授权。在使用客户端/服务器模式时(绑定模式依赖于计算机中的进程到进程身份验证),默认情况下 WebSphere MQ 不会执行任何用户身份验证。事实上,当您在连接工厂上为 WebSphere MQ 指定用户 ID 和密码时,这些值会被 WebSphere MQ 忽略。解决这个问题的一种方法是,在 WebSphere MQ 服务器端实现自己的自定义 WMQ 身份验证插件,对 WebSphere Application Server 发送的用户 ID 和密码进行验证。第二种(可能更简单的)方法是,将 WebSphere MQ 配置为使用 SSL 进行客户端身份验证,然后确保只有 WebSphere Application Server 服务器持有用于连接 WebSphere MQ 的证书。(有关的更多信息,请参阅 ;本文有点儿过时,但相同的原理和技术也适用于这两个产品的新版本。在实现其中提到的技术时,应该考虑到产品的变化。)9. 加强 Web 服务器和主机如果采用
中推荐的标准拓扑,那么 Web 服务器是在 DMZ 中运行的。因为 DMZ 是防范潜在入侵者的第一道防线,所以必须特别注意加强此服务器。本文不讨论加强 Web 服务器 的具体方法,但您应该在操作系统加强、限制装载的 Web 服务器模块和其他 Web 服务器配置步骤上下足功夫。(有关的更多信息,请参阅
和图书 。)在加强 Web 服务器时,有一个 WebSphere Application Server 特有的问题需要考虑。通过 WebSphere Application Server 管理基础架构来管理 Web 服务器是有可能的。虽然它便于使用看似是一件好事,但这却带来了严重的安全问题。有两种方式可以管理 Web 服务器:使用托管节点要求在 Web 服务器(通常位于 DMZ 中)上放置一个节点代理,而且要求使用该代理作为 WebSphere Application Server 计算单元的一部分。这从安全角度来看是完全不可接受的,因此不应该使用,除非在极少数不需要 DMZ 的情况下。这种方式不可接受的原因有两点:
首先,节点代理是计算单元的一个全功能成员,因此它有完全的管理权限。如果它在 DMZ 中遭到攻破,那么整个计算单元都会受到侵害。第二,WebSphere Application Server 是一个强大的大型产品,因此很难加强安全性,这样的产品不应该放在 DMZ 中。第二种方式要求使用 IBM HTTP Server
和配置 HTTP 管理服务器。在这种情况下,部署管理器将管理请求发送给在 Web 服务器主机上运行的 HTTP 管理服务器。尽管这是一种比采用基于 Java 的节点代理更好的方法,但是许多人仍然认为这种做法存在风险,最好根本不在 DMZ 中提供管理功能。10. 删除 Web 服务器和插件安装程序遗留的 JRE在安装 IBM HTTP Server 时,安装程序会遗留一个 JRE。应该删除此 JRE,因为它提供的功能是 Web 服务器或插件在正常情况下所不需要的。请记住,这样做之后,将不能在此 Web 服务器上运行 ikeyman 等工具。我们不认为这个问题很重要,因为在 DMZ 中运行这样的工具并不合适。当使用 IBM 安装程序安装 WebSphere Application Server HTTP Server 插件时,也会遗留一个 JRE。同样,在完成安装后,应该删除此 JRE。如果您决定删除 JRE,那么应该做一下备份,以防将来使用。一种方法是对该 JRE 执行 zip 或 tar,并在以后需要时将它放回原处(例如,在应用补丁时,WebSphere Application Server 更新安装程序需要它),然后对其执行 zip/tar,并在过程结束时再次将其删除。11. 加强代理如果把安全代理服务器放在 DMZ 中,替代 Web 服务器(或与 Web 服务器共存),那么前面的建议也适用于这个代理,但是这里并不打算提供具体细节,因为具体的加强方法与代理相关。关于 WebSphere DataPower 的一个要点是:Web 安全代理通常并不适用于代理 Web 服务通信流,因为它们无法阻止在传输 XML 时可能出现的威胁。要提供安全的 Web 服务(或任何基于 XML 的协议),可 。12. 谨慎地配置和使用信任关联拦截器 (trust association interceptor)TAI 经常用于让 WebSphere Application Server 能够识别来自 Web SSO 代理服务器(例如 Tivoli Access Manager WebSEAL)的现有身份验证信息。这通常没什么问题。然而,在开发、选择和配置 TAI 时需要特别注意。TAI 会扩展信任域。目前 WebSphere Application Server 信任 TAI 以及 TAI 所信任的所有内容。如果 TAI 开发或配置不正确,就有可能彻底危害 WebSphere Application Server 的安全性。如果您自行开发 TAI,则需要确保 TAI 仔细检验请求中传递的参数,并确保以可靠的方式进行检验。我们曾经见过 TAI 做蠢事,比如直接接受 HTTP 头中的用户名。这是没用的,除非确保 WebSphere Application Server 收到的所有通信流都是通过身份验证代理发送的。例如,使用
描述的技术。这样身份验证代理总是会覆盖客户端设置的 HTTP 头,因为可以伪造 HTTP 头。WebSEAL TAI 配置为了说明仔细配置的重要性,本文将详细讨论 IBM 提供的遗留 WebSEAL TAI,但任何 TAI 都需要认真设计和配置才能获得安全性。对 WebSphere Application Server 和 Tivoli Access Manager WebSEAL 之间的信任关系进行合理的配置是创建安全配置的关键。要创建安全配置,就必须对 WebSphere Application Server 和 WebSEAL 都执行一些步骤。在 WebSphere Application Server 中,必须对 Web 容器配置和 WebSEAL TAI 配置都进行合理的设置。这两种产品之间的信任关系是很重要的,因为 WebSphere Application Server 中的 WebSEAL TAI 接受来自 WebSEAL 的身份断言。如果可以攻破该链接,入侵者就可以断言任何身份,并彻底破坏基础架构的安全性。WebSphere Application Server 和 WebSEAL 之间的信任关系可以通过以下两种机制之一建立:相互 SSL 身份验证和基于密码的身份验证。这两种机制在安全的环境中都适用。然而,每一种机制都必须进行合理的配置,否则可能会出现严重的安全问题。在每种机制中,WebSEAL 都将最终用户的用户 ID 作为 iv-user 头在 HTTP 请求中发送。这两种配置的区别在于 WebSEAL 向应用服务器证明自身的方式。WebSEAL 密码配置在使用密码身份验证时,WebSEAL 会将其用户 ID 和密码作为基本的 auth 头在 HTTP 请求中发送(该用户的用户 ID 位于 iv_user 头)。基于密码的身份验证在两个地方配置。首先,对于要配置的汇合点,必须配置 TAM WebSEAL,以便将其用户 ID 和密码发送给应用服务器。当然,此密码是机密的,必须小心保护。WebSEAL TAI 在收到密码时会根据注册表对其进行检验。然而,这一点很不起眼,容易被忽视。如果在 WebSEAL TAI 属性中没有设置 LoginId 属性,TAI 就会检验从 WebSEAL 发送出来的用户 ID 和密码组合;如果它是任何有效的用户 ID 和密码组合,则会信任它。这种配置是不安全的,因为这意味着知道任何有效用户 ID 和密码组合的任何人都可以连接到 WebSphere Application Server,并断言任何用户的身份。在指定 LoginId 属性时,WebSEAL TAI 会忽略基本 auth 头中的入站用户 ID,并检验 LoginId 和 WebSEAL 密码组合。在这种情况下,能够从 WebSEAL 发出的有效密码只有一个(大概接近于受保护的机密)。当然,应该配置从 WebSEAL 到应用服务器的 SSL,以确保该机密密码不会以明文形式发送。WebSEAL mutualSSL 配置Mutual SSL 是通过三个单独的非常重要的步骤配置的:必须把 WebSEAL 配置为使用 SSL 与 WebSphere Application Server 进行通信,而且该 SSL 配置必须包含只有 WebSEAL 才知道其私钥的客户端证书。必须配置应用服务器 Web 容器,以便执行客户端证书身份验证。还必须更改其信任存储库,使之仅包含 WebSEAL 正在使用的客户端证书。这个步骤至关重要,因为只有这样才能保证对应用服务器 Web 容器的请求仅来自 WebSEAL,而非某个入侵者(仅仅使用相互身份验证的 SSL 是不够的)。还必须将非 HTTPS 传输从 Web 容器中删除,确保在与服务器联系时只使用相互身份验证的 SSL。必须在 WebSEAL TAI 的属性中设置 mutualSSL=true。然而,必须了解的是,最后这个步骤只是向 TAI 表明它应该假设这个连接是安全的,而且它使用了相互身份验证的 SSL。如果前面两个步骤没有严格地正确配置,环境就会十分不安全。因此,在选择使用 mutualSSL 时必须非常谨慎。任何配置失误都会导致环境可被任何用户模仿。如果在环境中添加一个 Web 服务器,则会使情况变得更加复杂。在这种情况下,必须谨慎地配置 WebSEAL 和 Web 服务器之间的 mutualSSL 配置,以及 Web 服务器插件和 WebSphere Application Server Web 容器之间的第二个配置。多种 WebSEAL TAI目前,可以使用三种 TAI 在 WebSEAL 和 WebSphere Application Server 之间提供 SSO:WebSphere Application Server 附带的遗留 WebSEAL TAI (WebSealTrustAssociationInterceptor):不要使用这种 TAI,因为它在 V7 中已经弃用了,而且如果配置不当,会很危险。WebSphere Application Server 附带的 Tivoli Access Manager Interceptor Plus TAI (TAMTrustAssociationInterceptorPlus)。这种 TAI 解决了前一种 TAI 的安全漏洞,应该优先选用它。但是,它在功能方面与遗留 TAI 有些差异(包括需要 TAM 客户端配置),所以一些用户不喜欢使用它。可以
的 Enhanced Tivoli Access Manager TAI (TAMETai)。这种 TAI 与 TAMPlus TAI 一样妥善地加强了安全性,但是增加了一些重要功能,比如可以像遗留 WebSEAL TAI 一样在没有 Tivoli Access Manager 客户端的情况下运行。一般情况下,应该根据自己的需要使用第二种或第三种 TAI。13. 谨慎地使用证书身份验证证书身份验证可能导致两种非常特殊的风险:撤消:证书可能被破解,必须采取措施来撤消被破解的证书。
证书提供一种强大的身份验证形式,从安全性的角度来说非常不错。但是,必须考虑到撤消的问题。因为用户控制自己的私钥,所以私钥有可能被窃取。因此,所有 CA 都提供证书撤消机制;也就是说,CA 声明这个证书不再可信。为了让证书撤消起作用,证书的接受者必须检查它是否仍然有效。许多人忽视了这一点。如果不适当地支持撤消,那么使用证书执行身份验证是很愚蠢的。有多种技术可供使用(这里不再详细讨论);简单地说,您可以选用以下技术:Online Certificate Status Protocol (OCSP)。Certificate Revocation List,可以通过证书中嵌入的端点或分发点信息找到这个列表。如果证书数量很少,那么只需颁发自签名证书即可。只需删除相应的签署者,就可以撤消证书。WebSphere Application Server 支持所有这些技术,但是都需要配置。一定要执行相应的配置步骤。Liberty 配置文件不支持 OCSP 或 Certificate Revocation List。Web 身份验证信任风险:必须正确地配置用来检验证书的机制;在默认情况下,证书检验机制并不适用于 Web 通信流。
当对 Web 通信流使用基于证书的身份验证时,可能会出现一个非常不起眼的信任问题。当 Web 客户端向 Web 服务器验证身份时,Web 服务器会检验证书。然后,WebSphere Application Server Web 服务器插件将来自 Web 服务器的证书信息转发给应用服务器。通过转发这一信息,Web 容器就可以将证书映射到一个 Java EE 身份。问题是,这一信息仅仅是对证书的描述(在公共证书中可以找到的信息)。如果入侵者直接连接 Web 容器,绕过 Web 服务器,就很容易攻破系统,因为入侵者可以伪造证书信息,欺骗运行时环境,将自己伪装成任何人。这意味着,如果使用证书执行身份验证(基于 Java EE 的身份验证或自定义的应用程序代码直接检查证书),就必须堵住这个漏洞。您需要考虑两种情况。如果打算使用证书向 Web 服务器验证身份,让 Web 容器可以使用这些证书执行身份验证,则需要对 Web 服务器到 Web 容器的链接进行身份验证(参见 )。如果打算使用证书直接向 Web 容器验证身份(也就是说没有 Web 服务器),则必须通过配置 Web 容器让它忽略 HTTP 头中的证书信息(在这种情况下,这些信息可能是伪造的)。为此,必须在每个应用服务器的 Web 容器上配置 "trusted" 自定义属性,并把它的值设置为 false,参见图 6。图 6. 将 Web 容器设置为忽略来自客户端的证书头要将 Liberty Web 容器配置为忽略来自客户端的证书头,可将 webcontainer 信任元素包含在配置文件的 server.xml 文件中,如清单 2 所示。清单 2. 在 Liberty 中忽略来自客户端的证书头&webcontainer trusted=’false’/&如果目标是支持向 Web 服务器和 Web 容器进行证书身份验证,则需要使用自定义的代码,因为这两个解决方案都不够安全;都容易受到来自其他连接路径的攻击。实际上,需要开发自定义的 TAI 或应用程序代码,从而利用 IBM 特有的特性,让 Web 容器中运行的代码能够判断通过 Java EE API 获得的证书信息的来源:是直接连接到 Web 容器(因此证书是可信的),还是从 HTTP 头获取(在这种情况下,证书实际上是不可信的)。如果是后一种情况,自定义的代码可以直接查看在 SSL 握手过程中提供给容器的证书信息,检查设置 HTTP 头的群体是否可信;例如,自定义的代码可以检查 SSL 客户端证书(通过请求属性 com.ibm.websphere.ssl.direct_connection_peer_certificates 获取),检查直接容器连接是否来自 WebSphere Application Server 插件;如果是这样,请接受 HTTP 头中的证书信息。这个特性是 7.0.0.7 中新增的,相关信息参见 。14. 考虑对 Web 服务器到 WebSphere Application Server 的 HTTP 链接进行身份验证WebSphere Application Server Web 服务器插件将来自 Web 服务器的请求转发给目标应用服务器。在默认情况下,如果到 Web 服务器的通信是通过 HTTPS 完成的,那么在将请求转发到应用服务器时,插件会自动地使用 HTTPS,从而保护其机密性。另外,更谨慎的做法是将应用服务器(它包含一个小的嵌入式 HTTP 监听器)配置为只接受来自已知 Web 服务器的请求。这样做可以防止各种绕过 Web 服务器前或 Web 服务器中的任何安全性检查的暗中攻击,创建一个可信的网络路径。这种情况看似不太可能出现,但确实存在这种可能。我们无法一一列举所有场景,下面是一些例子(这绝不是全部例子):有一个身份验证代理服务器,它只是将用户 ID 作为 HTTP 头发送出去,并不发送任何身份验证信息。可以直接访问 Web 容器的入侵者只需要提供相同的头,就可以成为任何人。(IBM Tivoli Access Manager WebSEAL 不存在这种漏洞。)有一个代理服务器,它执行重要的授权,以很粗的粒度限制谁可以访问哪些应用程序。有一个代理服务器,它执行重要的审计,不希望它被绕过。像前一小节讨论的一样,使用客户端证书向 Web 服务器验证身份。要创建从 Web 服务器到应用服务器的可信网络路径,需要配置应用服务器 Web 容器 SSL 配置,以便使用客户端身份验证。一旦确保了正在使用客户端身份验证,就需要确保只有可信的 Web 服务器才能联系 Web 容器。要实现这一点,必须通过应用
中介绍的 SSL 隧道技巧或者确认前一节中提及的直接 SSL 对等方来限制具有访问权限的群体。具体地说,需要执行以下操作:为 Web 容器创建一个密钥存储库和信任存储库,为 Web 服务器插件创建一个密钥存储库。从所有密钥存储库(包括信任存储库)删除所有现有的签名证书。此时,不能使用任何密钥存储库来检验证书。这样做是有意的。在这两个密钥存储库中创建自签名证书,并只导出该证书(而不是私钥)。一定要记录这些证书的到期时间。当插件证书到期之后,它就不能再联系 Web 容器了!将从 Web 容器密钥存储库中导出的证书导入插件密钥存储库中。将插件证书导入到 Web 容器信任存储库中。现在,每一端都只包含一个签名证书。这意味着只能使用它们检验一个证书——为对方创建的自签名证书。将新创建的密钥存储库安装到 Web 容器和 Web 服务器插件中。15. 不要在生产环境中运行示例WebSphere Application Server 附带了几个非常好的示例,它们演示了 WebSphere Application Server 的各个部分。这些示例不是为在生产环境中使用而准备的。不要在生产环境中运行它们,因为它们会带来严重的安全风险。特别是 snoop Servlet 会向外部人员提供大量关于您的系统的信息。这正是您不希望潜在的入侵者获得的信息。只要不在生产环境中运行 server1(它默认包含这些示例),不在配置文件创建期间安装这些示例,或者从 server1 卸载示例应用程序,就很容易解决这个问题。16. 选择合适的进程身份WebSphere Application Server 进程是在操作系统上运行的,因此必须在某个操作系统身份下运行。有三种运行 WebSphere Application Server 的方式与操作系统身份有关:以 root 身份运行一切程序。以单一用户身份(例如 “was”)运行一切程序。以 root 身份运行节点代理,以应用服务器自己的身份运行各个应用服务器。IBM 测试过并完全支持前面两种方法。第三种方法看似很有吸引力,因为那样就可以利用操作系统权限,但它在实践中不是十分奏效,主要具有以下几个原因:配置它非常困难,而且配置过程没有文档说明。许多 WebSphere Application Server 进程都需要对无数文件具有读访问权限,并对 log 和 transaction 目录具有写访问权限。通过以 root 身份运行节点代理,实际上会向 WebSphere Application Server 管理员和在 WebSphere Application Server 中运行的任何应用程序授予 root 权限。这可能包含一个 Generic Server,它是一个非 WebSphere Application Server 进程。这可能是一个 Java 或原生可执行文件,将以 root 身份运行。这种方法的主要价值在于控制应用程序对文件系统的访问。但是,使用 Java 2 权限也可以实现这一点。这种方法会造成应用程序互相隔离的错觉。其实不是。WebSphere Application Server 内部安全模型基于 J2EE 和 Java 2 安全性,不受操作系统权限的影响。因此,如果选择使用这种方法来保护自己免受 “恶意” 应用程序的侵害,那么方法的方向可能弄错了。第一种方法明显是不可取的,因为作为一般的最佳实践,如果可以的话,最好避免以 root 身份运行任何进程。这样就只剩下第二种方法,它是完全受支持的。在某些很少见的情况下,可能并不关心应用程序隔离,但是希望以不同的操作系统身份运行应用程序以便进行审计,那么可以使用第三种方法。从安全性的角度来看,这没有什么价值,而且实际上会略微增加风险,但是有可能使用操作系统级审计。17. 保护配置文件和私钥应该利用操作系统文件权限来限制对 WebSphere Application Server 文件的文件系统访问。与任何复杂的系统一样,WebSphere Application Server 使用和维护大量敏感信息。一般来讲,不应该有人对大多数 WebSphere Application Server 信息具有读或写权限(参见边栏)。特别是 WebSphere Application Server 配置文件 (&root&/config),它既包含配置信息,也包含密码。另外,应该注意避免不小心共享密钥。例如,不要在生产环境中使用与其他环境中相同的密钥。许多人对开发和测试计算机及他们自己的密钥具有访问权限。应该谨慎地保护生产环境所用的密钥。如果不谨慎地控制谁对文件系统有写访问权限,那么用户只需手工编辑配置文件,就可以破坏产品的安全控制(比如审计)。18. 加密从 WebSphere Application Server 到 LDAP 的链接在使用 LDAP 注册表时,WebSphere Application Server 会使用标准的 ldap_bind 来验证用户密码。这要求 WebSphere Application Server 将用户密码发送给 LDAP 服务器。如果该请求没有加密,那么黑客可以使用网络嗅探器来窃取用于身份验证的用户密码(包括管理密码!)。大多数 LDAP 目录都支持 LDAP over SSL,并且可以将 WebSphere Application Server 配置为使用 LDAP over SSL。在 LDAP 用户注册表面板中(请参见图 7),选中 use SSL enabled
选项,然后配置适合您的 LDAP 目录的 SSL 配置。很可能需要将用于 LDAP 服务器证书的签名密钥(证书)放在信任的存储库中。最好是创建只供 LDAP 使用的新的 SSL 配置,以避免给当前使用 SSL 的其他领域造成问题。图 7. 启用 LDAP SSL如果使用一个自定义注册表,您一定想要使用所提供的机制保护此通信流。要对 Liberty 配置文件启用 LDAP SSL,可将一些元素包含在服务器的 server.xml 中,类似于清单 3 中加粗的元素示例。&featureManager&
&feature&ssl-1.0&/feature&
&/featureManager&
&ssl id="ldapSSLConfig" keyStoreRef="ldapTrustStore"
trustStoreRef="ldapTrustStore"/&&keyStore id="ldapTrustStore"
location="ldapTrustStore.jks" type="JKS" password="123456" /&
&ldapRegistry id="IBMDiretoryServerLDAP" realm="SampleLdapIDSRealm"
host="host.domain.com" port="389" ignoreCase="true"
baseDN="o=domain,c=us"
ldapType="IBM Tivoli Directory Server"
idsFilters="myidsfilters"
sslEnabled="true"
sslRef="ldapSSLConfig" /&19. 确保只通过 HTTPS 传输 LTPA cookieWeb 应用程序使用 cookie 跨请求跟踪用户。尽管这些 cookie 本身通常不包含敏感信息,但是它们会将用户与后端系统上用户的现有状态联系起来,如果入侵者捕获了您的 cookie,那么他们就有可能使用这个 cookie 伪装成您。因为网络通信流常常通过不可信的网络进行传输(考虑一下您喜欢的 WiFi 热区),数据包很容易被捕获,所以应该使用 SSL 加密重要的 Web 通信流,包括重要的 cookie。显然,如果所有请求都使用 SSL,那么 cookie 就会得到保护。但是,许多应用程序(可能偶尔)通过 HTTP 发送请求,并没有使用 SSL,这可能会暴露 cookie。幸运的是,HTTP 规范允许指定浏览器只通过 SSL 发送 cookie。对于 WebSphere Application Server,最重要的 cookie 是 LTPA cookie,因此,应该将它配置为只通过 SSL 发送。图 8. 将 LTPA cookie 限制为只使用 SSL要在 Liberty 配置文件中将 LTPA cookie 限制为仅使用 SSL,可以将一个 webAppSecurity 元素包含在服务器的 server.xml 文件中,该文件还包含 ssoRequiresSSL 属性,如清单 4 中的示例所示。清单 4. 在 Liberty 中启用应用程序安全性&webAppSecurity ssoRequiresSSL=’true’/&通过在会话管理面板上指定相似的设置,还可以将 HTTP Session(默认情况下是 JSESSION) cookie 限制为只使用 SSL。要在 Liberty 配置文件中将 HTTP Session cookie 限制为仅使用 SSL,可将一个 httpSession 元素包含在服务器的 server.xml 中,该文件还包含 cookieSecure 属性,如清单 5 中的示例所示。清单 5. 在 Liberty 中启用 HTTP Session cookie SSL&httpSession cookieSecure=’true’/&警告:在安装修复包 7.0.0.9 之前,Requires SSL 标志在 WebSphere Application Server V7 中无效。一定要安装它。20. 确保定期改变 LTPA 加密密钥WebSphere Application Server 使用 LTPA 加密密钥加密各种用户令牌(包括 LTPA cookie)。与任何密码术密钥一样,应该定期改变这些密钥。根据 WebSphere Application Server 和补丁级别不同,可能在默认情况下启用了自动密钥生成,也可能关闭了该功能;版本越新,默认情况下它关闭的可能性就越大。为了避免可能的宕机,请确保此功能已关闭,如图 9 所示。在首次对某个 Liberty 服务器启用安全性时,会生成 LTPA 密钥。应该确保会定期更改 LTPA 加密密钥。对于完整配置文件,可以启用自动 LTPA 密钥替换(参见图 9),也可以手工地重新生成密钥(参见图 10),或者通过 AdminTask.generateKeyForKeySetGroup 命令执行。对于 Liberty 配置文件,可以创建一个新配置文件,启用安全性,启动服务器,然后复制新生成的 ${server.config.dir}/resources/security/ltpa.keys 文件。一定要考虑 LTPA 密钥不一致的问题:首先,如果计算单元中的某些节点在一段时间内一直停机(而且密钥更改两次),那么它们可能会丧失通信能力。第二,如果与其他组件(比如另一个计算单元或 WebSphere DataPower)共享 LTPA 密钥,那么在更改密钥时,需要在所有地方更新它们,这通常会造成停机。因此,可以规划在计划的宕机期间更改您的 LTPA 密钥。将新密钥分发给计算单元中的所有节点,并在这个宕机窗口中将新密钥分发给所有外部系统/计算单元。图 9. 不启用自动 LTPA 密钥更新图 10. 手工生成新的 LTPA 密钥21. 不要在命令行上指定密码一旦启用了安全性,WebSphere Application Server 管理工具就会要求您仅在通过身份验证的情况下使用它。执行身份验证的明确方法是在命令行中指定用户 ID 和密码,将其作为参数传递给该工具。请不要这样做。这会向在您身边窥探的任何人暴露您的管理密码。而且在许多操作系统中,任何可以看到进程列表的人都可以看到命令行上的参数。另外,以前的命令可在命令历史中看到,包括密码参数。相反,应该确保通过管理工具提示输入用户 ID 和密码。请注意,在所有当前支持的 WebSphere Application Server 版本中,这是默认设置,所以无需执行任何显式操作来确保发生此行为。如果觉得命令行工具以图形方式提示输入用户 ID 和密码非常烦人,可以改变此行为,让工具使用基于文本的简单提示。要实现这一点,应该通过编辑适当的配置文件,将 loginSource 从 prompt 更改为 stdin。在默认情况下,管理工具使用 SOAP,因此应该编辑 soap.client.props 文件。如果使用的是 RMI,则编辑 sas.client.props。请在适当的文件中查找 loginSource 属性,并更改它以指定 stdin。这一项不适用于 V8.5 中的 Liberty 配置文件。22. 考虑在基于文件的 Federated Repository 注册表中增加附加数据如果在使用 Federated Repository 注册表的同时还使用了该注册表中内置的文件存储库,那么该注册表中的用户会将他们的用户 ID 和密码存储在计算单元 config 目录中的 fileregistry.xml 文件中。这些密码经过了单向哈希计算,这意味着您无法从哈希值获得实际的密码。哈希值可借助一些密码学上的附加数据来计算。在 WebSphere Application Server V8.0 和 8.5 中,可以指定附加数据的长度和使用的哈希算法。此文件应由 OS 定义的访问控制列表来保护,以便只有特权 OS 用户才能读取该文件。要预防通过彩虹表的密码破解攻击,可以考虑增加附加数据量或使用更强的哈希函数。这一项不适用于 V8.5 中的 Liberty 配置文件。23. 考虑为生成的证书使用更长的密钥长度在 WebSphere Application Server V8.0 中,生成的证书所使用的默认密钥长度从 1024 更改为 2048。从 V7.0 开始,在通过 wsadmin 生成密钥时,可指定比 1024 更长的密钥长度。从 V8.0 开始,管理控制台(图 11) 支持选择密钥长度。这一项不适用于 V8.5 中的 Liberty 配置文件。图 11. 在管理控制台中选择密钥长度支持的密钥长度范围为 512-16384(必须是 8 的倍数)。这一项不适用于 V8.5 中的 Liberty 配置文件。24. 创建单独的管理用户 ID当为 WebSphere Application Server V6.1 和更高版本配置安全性时(Liberty 配置文件除外),在开始时会配置一个主管理 ID(参见边栏)。这个 ID 实际上等同于 WebSphere Application Server 中的 root 用户,它能够执行任何管理操作(包括下一节提到的所有管理角色)。由于这个 ID 很重要,所以最好不要随便共享其密码。理想情况下,在最初配置之后不应该再使用这个 ID。出于安全原因,在 V8.5 中,默认情况下并未启用 Liberty 配置文件。与大多数系统一样,WebSphere Application Server 允许多个主体担任管理员。只需使用管理应用程序并进入系统管理控制台用户(或用户组)部分,指定应该授予管理权限的其他用户或用户组。在进行这样的授权之后,当管理 WebSphere Application Server 时,每个人都可以以自己的身份进行身份验证。会导致更改 WebSphere Application Server 配置的所有管理操作都需要经过部署管理器的审核,包括执行更改的主体的身份。从 V7 开始,引入了一个新的审计框架,它可以提供更详细的管理操作审计信息。显然,如果每个管理员有单独的身份,这些审计记录会更有用。在由中心管理员管理多个 WebSphere Application Server 计算单元的环境中,为每个管理员授予单独的管理访问权限会非常方便。虽然每个计算单元都有自己的本地 “根” ID 和密码,但是可以配置所有这些计算单元来共享公共注册表,这样管理员就可以使用相同的 ID 和密码来管理每个计算单元。25. 利用管理角色根据版本不同,WebSphere Application Server 的完整(非 Liberty 配置文件)允许采用不同的管理角色:Administrator、Operator、Monitor、Configurator、AdminSecurityManager、iscadmins、Deployer、Auditor。这些角色使得授予个人(和自治系统)适当的访问权限成为可能。强烈建议尽可能地利用这些角色。通过使用权限较少的 Monitor 和 Operator 角色,可以限制管理员能够执行的操作。例如,可以只授予较为低级的管理员启动和停止服务器的能力;只授予夜间操作员监视系统的能力(Monitor)。这些操作让人员只具有他们需要的权限,这极大地限制了损害风险。在 WebSphere Application Server Information Center 中可以找到关于角色及其拥有的权限的完整文档。但是,应该特别注意下面三个角色:Monitor:如果授予用户或系统这个访问级别,则意味着他们只能监视系统状态;不能更改状态,也不能更改配置。例如,如果您开发用于检查系统运行状况的监视脚本,并且必须用该脚本在本地保存用户 ID 和密码,那么应该使用具有 Monitor 角色的 ID。即使该 ID 被窃取,所造成的损害也不会很严重。AdminSecurityManager:(V6.1 中增加的)具有此角色的用户可以授予其他用户管理角色。Administrator 角色本身没有这个权限。现在,可以向用户授予各种权限(甚至包括 Administrator 权限),同时仍然确保他们无法将这些权限再授予他人。Auditor:(V7 中增加的)具有此角色的用户可以配置审计系统,但是没有其他任何权限。另一方面,Administrator 可以配置除审计系统之外的任何东西。这提供明确的职责分隔。Administrator 可以更改配置,但是无法 “掩盖” 操作痕迹,因为他无法禁用审计。这一项不适用于 V8.5 中的 Liberty 配置文件。Liberty 配置文件只有一个管理员安全角色可绑定多个主体。26. 考虑加密 Web 服务器到 Web 容器的链接即使不对从 Web 服务器到 Web 容器的链接进行身份验证,也可能希望考虑对它进行加密。Web 服务器插件通过 HTTP 把来自 Web 服务器的信息传输到 Web 容器。如果到达 Web 服务器的请求使用的是 HTTPS,那么在默认情况下插件使用 HTTPS 转发请求。如果到达的请求使用的是 HTTP,那么插件使用 HTTP。这些默认行为对于大多数环境是合适的。但是,有一种例外情况。在某些环境中,当请求到达您的网络之后,就会在其中添加敏感信息。例如,一些身份验证代理服务器(比如 WebSEAL)会在请求中添加密码信息。Web 服务器中的自定义代码可能做相似的事情。如果是这种情况,应该采取额外步骤保护从 Web 服务器到 Web 容器的通信流。要想迫使从此插件发出的所有通信流都使用 HTTPS,只需在每个应用服务器上的 Web 容器中禁用 HTTP 传输,然后重新生成和部署插件。必须同时禁用 WCInboundDefault 和 HttpQueueInboundDefault 传输链(图 12)。现在,此插件只能使用 HTTPS,所以无论通信流如何到达 Web 服务器,它都会使用 HTTPS 执行转发。图 12. 确保只使用 HTTPS要在 Liberty 配置文件中确保仅使用 HTTPS 连接 Web 容器,可将一个 httpEndpoint 元素包含在服务器的 server.xml 文件中,该文件还包含一个 httpsPort 属性,但不包含 httpPort 属性(如清单 6 中的示例所示)。清单 6. 在 Liberty 中确保仅使用 HTTP 连接到 Web 容器&httpEndpoint id="defaultHttpEndpoint" host="localhost"
httpsPort="9443" /&27. 加密 WebSphere MQ 消息传递链接如果您使用的是 WebSphere MQ 而非默认的消息传递提供者,当然应该对 WebSphere MQ 使用 SSL。有关这一点的更多信息,请参阅 。在 WebSphere Application Server V7 中,WebSphere MQ 客户端 SSL 配置是第一类构造,可以像其他 SSL 配置一样通过管理控制台设置。这一项不适用于 V8.5 中的 Liberty 配置文件。28. 加密 Distribution and Consistency Services (DCS) 传输链接核心组依赖于 DCS,它使用可靠的多播消息 (RMM) 系统来进行传输。RMM 可以使用几种有线传输技术之一。根据环境不同,可以通过 DCS 传输敏感信息。例如,使用 DCS 传输 DynaCache 和安全性主题缓存中的数据。为了确保这一点,需要选择一种通道框架传输类型,并选择 DCS-Secure 作为每个核心组的通道链(图 13)。图 13. 配置 DCS 以使用受保护的链接请注意,当启用全局安全性时,DCS 始终对消息进行身份验证。在加密传输之后,就有了一个高度安全的通道。一旦做到这一点,所有依赖于 DCS 的服务都将使用加密且经过身份验证的传输。这些服务是 DynaCache、内存到内存会话复制、核心组、Web 服务缓存和有状态会话 bean 持久化。29. 保护从应用服务器到数据库的链接与其他任何网络链接一样,可以将机密信息写入数据库或从数据库中读取机密信息。大多数数据库都支持某种形式的身份验证,您应该利用这一点。这里是一个 。这一项不适用于 V8.5 中的 Liberty 配置文件。30. 考虑将 cookie 限制为 HTTP Only如果黑客能够通过在浏览器中插入恶意的 JavaScript 攻破 Web 应用程序(这通常称为跨站点脚本攻击),就可以执行许多恶意操作,应用程序实际上完全被攻破了。他们可以执行的恶意操作之一是窃取 LTPA cookie 等敏感的 cookie。大多数现代 Web 浏览器都支持 。WebSphere Application Server 提供了两种确保 LTPA cookie 被标记为 HTTP Only 的方法。第一种方法是将安全性自定义属性 com.ibm.ws.security.addHttpOnlyAttributeToCookies 设置为 true。此功能通过修复包 7.0.0.9 添加。该功能只使用 HTTP Only 标志保护 LTPA cookie。对于以正确方式编写的使用 Java EE 安全性并启用会话安全性(稍后讨论)的应用程序,这应该足够用了。第二个功能(也在修复包 7.0.0.9 中发布)支持在任意 cookie 上设置 HTTP Only 标志。此功能比第一个功能更可取,因为它更加灵活且更加完整。借助此 APAR,要保护的 cookie 由一个 Web 容器属性 com.ibm.ws.webcontainer.httpOnlyCookies 控制。该属性是要保护的 cookie 的一个逗号分隔列表(使用 * 表示所有 cookie)。在 V7.0 中(应用了 7.0.0.9),这个功能默认情况下是禁用的。要使用它,则必须显式设置该属性。在 8.0 和 8.5 版中,此属性默认情况下已对 LtpaToken2、JSESSIONID 和 WASReqUrl cookie 启用,无需执行进一步的操作,除非您希望将它应用于其他 cookie。请注意,由于默认行为中的这一更改,从更早版本迁移来的用户可能会遇到应用程序破坏问题。默认情况下,LtpaToken2 (SSO) 和e WASReqURL cooki 在 Liberty 配置文件中设置为 HTTP only。要在服务器的 server.xml 文件中显式设置此属性,可以包含一个具有 httpOnlyCookies 属性的 webAppSecurity 元素,比如清单 7 中的示例。清单 7. 在 Liberty 中将 LTPA 会话 cookie 限制为 HTTP Only
&webAppSecurity httpOnlyCookies=’true’ /&&!- - This is the default- -&默认情况下,HTTP 会话在 Liberty 配置文件中也被设置为 HTTP only。要在服务器的 server.xml 中显式设置此属性,可以包含一个具有 cookieHttpOnly 属性的 httpSession 元素,比如清单 8 中的示例。清单 8. 在 Liberty 中将 HTTP 会话 cookie 限制为 HTTP Only&httpSession cookieHttpOnly=’true’ /&&!- - This is the default- -&警告:尽管这些功能看起来是防御跨站点脚本攻击的解决方案,但它不是。如果黑客可以在您的浏览器中执行任意代码,那么他们造成的危害就远远不只是窃取 cookie。他们实际上可以看到浏览器屏幕上的所有内容,可以捕获每次击键,这比窃取 cookie 严重得多。31. 通过培训让用户正确地理解证书警告当使用 SSL 进行通信时,安全地交换信息的关键之一是根据客户端信任存储库检验服务器的证书。如果由于信任存储库中没有相应的签署者而导致服务器提供的证书不可信,那么大多数客户端(Web 浏览器、SSH、wsadmin 等)会提示用户决定应该怎么做。这些客户端通常会向用户警告这是一个未知的证书,并提供证书的指纹(通常是 SHA),询问 should I trust this?。遗憾的是,大多数用户会盲目地单击 yes。这是一个可怕的决定。如果这么做,那么您就不会知道自己将与什么样的服务器通信。对于 WebSphere Applicati

我要回帖

更多关于 前段时间是什么时候 的文章

 

随机推荐