深刻分析JavaWeb Item3 -- Tomcat服务器学习和使用2

1、打包JavaWeb应用

  在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命令的用法以下:web

  这里写图片描述

范例:将JavaWebDemoProject这个JavaWeb应用打包成war包算法

  这里写图片描述

  执行完以后,就能够获得一个文件这里写图片描述,平时开发完JavaWeb应用后,通常都会将JavaWeb应用打包成一个war包,而后将这个war包放到Tomcat服务器的webapps目录下,当Tomcat服务器启动时,就会自动将webapps目录下的war包解压。apache

好比如今将放这里写图片描述到放到Tomcat服务器的webapps目录下浏览器

  这里写图片描述

Tomcat服务器启动后会自动"Deploying web application",将这个war文件解压缩,以下图所示:tomcat

  这里写图片描述

  

2、Tomcat的体系结构

  这里写图片描述

  Tomcat服务器的启动是基于一个server.xml文件的,Tomcat启动的时候首先会启动一个ServerServer里面就会启动ServiceService里面就会启动多个"Connector(链接器)",每个链接器都在等待客户机的链接,当有用户使用浏览器去访问服务器上面的web资源时,首先是链接到Connector(链接器),Connector(链接器)是不处理用户的请求的,而是将用户的请求交给一个Engine(引擎)去处理,Engine(引擎)接收到请求后就会解析用户想要访问的Host,而后将请求交给相应的HostHost收到请求后就会解析出用户想要访问这个Host下面的哪个Web应用,一个web应用对应一个Context安全

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" 
               keystoreFile="conf/.keystore" keystorePass="123456"/>
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
      <Host name="www.gacl.cn" appBase="F:\JavaWebApps">
        <Context path="" docBase="F:\JavaWebApps\JavaWebDemo1"/>
      </Host>

    </Engine>
  </Service>
</Server>

3、互联网上的加密原理

  Tomcat服务器启动时候会启动多个Connector(链接器),而Tomcat服务器的链接器又分为加密链接器和非加密连机器,好比:服务器

  这里写图片描述

  这里访问的就是使用8080端口的那个链接器app

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

  这个Connector是一个没有加密的链接器,使用"http://localhost:8080/JavaWebDemoProject/Web/1.jsp"去请求服务器上的web资源的这个过程当中,咱们的请求是不加密的,要是想以一种加密的方式来访问Tomcat服务器,那么就要在Tomcat里面配置一个加密的Connector。要配置一个加密链接器,首先应该把互联网上的加密原理弄清楚。webapp

3.一、对称加密

  采用单钥密码系统的加密方法,同一个密钥能够同时用做信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
  须要对加密和解密使用相同密钥的加密算法。因为其速度快,对称性加密一般在消息发送方须要加密大量数据时使用。对称性加密也称为密钥加密。
  所谓对称,就是采用这种加密方法的双方使用方式用一样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。
  加密的安全性不只取决于加密算法自己,密钥管理的安全性更是重要。<font color="red">由于加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必需要解决的问题。
  经常使用的对称加密有:DES、IDEA、RC二、RC四、SKIPJACK、RC五、AES算法等jsp

3.二、非对称加密

  非对称加密算法须要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,若是用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;若是用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。由于加密和解密使用的是两个不一样的密钥,因此这种算法叫做非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把做为公用密钥向其它方公开;获得该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用本身保存的另外一把专用密钥对加密后的信息进行解密。另外一方面,甲方可使用乙方的公钥对机密信息进行签名后再发送给乙方;乙方再用本身的私匙对数据进行验签。

非对称加密工做原理

  • 1.A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥。

  • 2.A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。

  • 3.A要给B发送信息时,A用B的公钥加密信息,由于A知道B的公钥。

  • 4.A将这个消息发给B(已经用B的公钥加密消息)。

  • 5.B收到这个消息后,B用本身的私钥解密A的消息。其余全部收到这个报文的人都没法解密,由于只有B才有B的私钥

  发送方使用接收方的公钥对数据加密,而接收方则使用本身的私钥解密,这样,信息就能够安全无误地到达目的地了,即便被第三方截获,因为没有相应的私钥,也没法进行解密。经过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。

  非对称性加密依然没有解决数据传输的安全性问题,好比A想向B发数据,B首先生成一对密钥(公钥和私钥),而后将公钥发给A,A拿到B发给他的公钥有就可使用公钥加密数据后发给B,然而在B公钥发送给A的这个过程当中,颇有可能会被第三方C截获,C截获到B的公钥后,也使用B的公钥加密数据,而后发给B,B接收到数据后就晕了,由于搞不清楚接收到的数据究竟是A发的仍是C发的,这是其中一个问题,另外一个问题就是,C截获到B发的公钥后,C能够本身生成一对密钥(公钥和私钥),而后发给A,A拿到公钥后就觉得是B发给他的,而后就使用公钥加密数据发给B,发送给B的过程当中被C截获下来,因为A是用C发给他的公钥加密数据的,而C有私钥,所以就能够解密A加密事后的内容了,而B接收到A发给他的数据后反而解不开了,由于数据是用C的公钥加密的,B没有C的私钥,因此就没法解密。<font color="red">因此,非对称性加密存在一个问题:A想向B发数据,A如何肯定拿到的公钥必定是B发的呢?那么如何解决这个问题呢?只能靠一个第三方机构(CA机构,即证书受权中心(Certificate Authority ),或称证书受权机构)来担保。A想向B发数据,B首先将公钥发给CA机构,CA机构拿到B的公钥后跑到B的家里问:这是你发的公钥吗?B确认事后说是:没错,是我发的!那么此时CA机构就会为B的公钥作担保,生成一份数字证书给B,数字证书包含了CA的担保认证签名和B的公钥,B拿到CA的这份数字证书后,就发给A,A拿到数字证书后,看到上面有CA的签名,就能够肯定当前拿到的公钥是B发的,那么就能够放心大胆地使用公钥加密数据,而后发给B了。

4、https链接器

  明白了互联网上的加密原理以后,下面来看看浏览器与服务器交互时,浏览器想将数据加密后再发送给服务器,那么该怎么作呢?服务器首先要向浏览器出示一份数字证书,浏览器看到数字证书后,就可使用数字证书里面的公钥加密数据,因此要想作浏览器和服务器的加密数据传输,那么首先得针对服务器生成一份数字证书。而后再配置一下服务器,让服务器收到浏览器的请求以后,会向浏览器出示它的数字证书。

4.一、生成Tomcat服务器的数字证书

  SUN公司提供了制做证书的工具keytool, 在JDK 1.4之后的版本中都包含了这一工具,它的位置为<JAVA_HOME>\bin\keytool.exe

keytool -genkey -alias tomcat -keyalg RSA

使用keytool生成一个名字为tomcat的证书,存放在.keystore这个密钥库中

 这里写图片描述 

命令执行完以后,操做系统的用户文件夹下面就会生成一个.keystore文件,以下图所示:

  这里写图片描述

使用命令:keytool -list -keystore .keystore查看.keystore密钥库里面的全部证书

  这里写图片描述

4.二、配置https链接器

  将生成的.keystore密钥库文件拷贝到Tomcat服务器的conf目录下,以下图所示:

  这里写图片描述

  修改server.xml文件,配置https链接器,代码以下:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
                maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" 
              keystoreFile="conf/.keystore" keystorePass="123456"/>

  在server.xml文件中配置了一个端口是8443的加密链接器,浏览器访问8443端口的链接器时,将会以加密的方式来访问web服务器,这个链接器收到浏览器的请求后,将会向浏览器出示一份数字证书,浏览器再用数字证书里面的公钥来加密数据,keystoreFile="conf/.keystore" 用来指明密钥库文件的所在路径,服务器从密钥库中提取证书时须要密码,keystorePass="123456"指明密钥库的访问密码。

使用"https://localhost:8443/"访问8443的加密链接器

  这里写图片描述

  因为密钥库里面的证书是咱们手工生成的,没有通过CA的认证,因此使用"https://localhost:8443/"访问8443的加密链接器,浏览器会出现"证书错误,导航已阻止",浏览器认为当前要访问的这个主机是不安全的,不推荐继续访问,点击这里写图片描述就能够继续访问了,以下图所示:

  这里写图片描述

4.三、安装数字证书

  为了让浏览器信任咱们生成的数字证书,须要将数字证书安装到浏览器中,以IE8浏览器为例进行证书安装说明,安装步骤以下:

  

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

  证书安装成功后,重启IE浏览器,使用"https://localhost:8443/"访问8443的加密链接器,此时浏览器就再也不提示证书错误了,以下图所示:

  这里写图片描述

4.四、删除数字证书

  以IE8为例进行说明,操做步骤以下:工具----->Internet选项

  
这里写图片描述
  
这里写图片描述

  删除以后重启浏览器便可

相关文章
相关标签/搜索