日期:2014-05-17  浏览次数:20743 次

通向架构师的道路(第二天)之apache tomcat https应用

一、总结前一天的学习

在前一天的学习中我们知道、了解并掌握了Web Server结合App Server是怎么样的一种架构,并且亲手通过Apache的Http Server与Tomcat6进行了整合的实验。

这样的架构的好处在于:

ü   减轻App Server端的压力,用Web Server来分压,即Web Server只负责处理静态HTML内容,而App Server专职负责处理Java请求,这对系统的performance是一个极大的提升。

ü   安全,Web Server端没有任何Java源代码包括编译后的东西,对Internet开放的只有Web Server,因此黑客就算通过80端口攻入了我们的Web Server,他能得到什么?除了静态HTML内容,任何逻辑,口令他都得不到,为什么?喏。。。因为我们的App Server“躲”在Web Server的屁股后面呢。

需要注意的地方:

ü   如果以这样的架构出现,你的J2EE 工程,必须在web.xml里把那些个<servlet-mapping>划分清楚,比如说:

我们可以知道*.do, *.action, *.jsp是属于JAVA需要解析的东西对吧!

但是,如果你的servlet写成这样

/abc

/123

/def

那么当我们在作映射时,需要把/abc, /123, /def分别写成一行行的JKMount语句,是不是。。。OK,假设我们这个工程有100个servlet(这个算少的哦),你该不会在httpd.conf文件中给我写这样的无聊的东西100行吧?

所以,我们在规划我们的servlet时需要有矩可循,即pattern,因此我才一直强调,大家在servlet命名时必须统一成:

/servlet/myServletabc

这样,我在做这个Web Server到App Server的Mapping时,是不是只要一句:JkMount /servlet/* ajp13就可以搞定啦?

ü   同样的架构有不同的变种:

2  IIS+Tomcat

因为微软的IIS本身就是一个Web Server,因此通过IIS和Tomcat的一个插件叫”isapi”的也可以作到这样的架构,但是我强烈不推荐,因为JAVA源于Unix系统,归于Unix系统,Unix可是不认什么IIS的,一定请一定用Apache,你是JAVA不是多奶(dot net)。

2  Apache+Weblogic

2  IBM HttpServer(Apache的一个变种)+IBM WAS6.x/WAS7.X

2  Tomcat集群

Apache挂N多个tomcat,由tomcat1…tomcat2…tomcat3…等组成

2  Weblogic集群

Apache挂N多个weblogic,由weblogic1…weblogic2…weblogic3…等组成

2  WASND(IBMWebsphere App Server Network Deployment)

IBM HttpServer挂N多个WAS,由WAS1…WAS2…WAS3…等组成

 

 

二、HTTPS

2.1 HTTPS介绍

先来看HTTPS的概念

我们一般的http走的是80端口,而https走的是443端口,有什么不一样的地方吗?

很简单,我们拿个telnet命令来作个实验:

telnet127.0.0.1 80,直接就登进了80端口(如果你机器上的Apache开放的话),这样好极了,所有的http中的get, put, post全部可以被我们截获,你的上网帐号,你提交的表单信息全部被别人拦截,就算你对一些信息加了密,对于黑客来说,这些加密被解密只是时间问题,而且一般黑客可以利用云计算,群集计算对你的加密可以进行“硬杀伤”,即穷举算法,利用超大规模集群解密的你的算法会很快,电影里的几十秒解开一个128位的加密不是神话,是真的!!!

因此,我们要让黑客一开始就攻不进来,连门都进不来,何谈拿到我里面的东西,对不对?

现在我们把我的http通道,变成了https,同时关闭80端口,因此用用户要访问必须经过443端口。好了,我们再来用:

telnet localhost 443

你连telnet都进不进去,因此,你就无法再获取http通道内传输的东西了。因此黑客要进入你的网站先要突破这个https,而https使用的是RSA非对称128位加密,如果是安全交易类甚至会使用RSA 1024位加密算法,除非是世界上最高明的黑客才能突破我们的防线。

2.2 HTTPS的构成

要构成HTTPS,我们需要有一张“根证书”,一张“服务器认证”才能做到一般的https,HTTPS还分成“双向认证”,在双向认证的结构中我们需要3张证书即“根证书”,“服务器认证”,“客户端认证”。为什么需要这么多证书?嘿嘿,下面我们来看HTTPS是怎么构成这个“信任关系链”的。

ü   证书我们称为CA;

ü   根证书叫Root CA;

上述这个图什么意思?

首先,RootCA是全球的根,这个“树”的根是全球任何IE、FireFox、Safari里的证书库里都有这个RootCA的,因为它们是权威,所以全球的电子证书拿它们做“根”,这些证书比较具有代表性的是:

ü   Verisign

ü   RSA

这两家公司是世界上所有加密算法的“鼻祖”,因此被拜为全球所信任,我们可以在我们的IE中看到这些“根”。

其此,全球的计算器客户默认在装完系统后,都会带有这些ROOT CA,因此“ROOT CA签出来的服务器证书将自动被客户端所信任”。

所以,这个信任关系,就此建立。

在HTTPS是SSL的一种,它们间是如何进行加密传输的呢,就是这个“信任关系”,先建立起信任关系,然后再开始数据传输,在加密的世界中“建立信任”就需要用到至少2张证书,即ROOT CA, SERVER CA,我们把这个信任建立的过程称为“Hands Shake”,握手协议。

前面说到了,这个握手分单向和双向,包括上述这个图就是一个单向握手,什么叫单向,什么叫双向呢?我们下面来讲解:

ü   单向握手信任

我们又称它为“包二奶协议”,大家想一下,贪官包二奶和二奶说“你跟着我,我每月给你1万块”,他说的这个话,能不能写下来? 能吗? 当然不能,写下来还得了,将来二奶一不爽把这份白纸黑字的东西交到中纪委还不把这烂货给双规了哈?

所以,二奶单向里信任贪官,这