JavaWeb学习心得之Tomcat服务器(二)

来源:互联网 发布:eplan2.6破解软件 编辑:程序博客网 时间:2024/05/31 06:23

一、打包JavaWeb应用

       在Java中,使用“jar”命令来对将JavaWeb应用打包成一个War包,使用如下:


       执行完之后,就可以得到一个文件,平时开发完JavaWeb应用后,一般都会将JavaWeb应用打包成一个war包,然后将这个war包放到Romcat服务器的

webapps目录下,当Tomcat服务器启动时,就会自动将webapps目录下的war包解压。使用如下:


Tomcat服务器启动后会自动“Deploying web application”,将这个war包文件解压,如下图:



二、Tomcat的体系结构


       Tomcat服务器的启动时基于一个server.xml文件的,Tomcat启动的时候首先会启动一个Server,Server里面就会启动,Server里面就会启动Server,Server里面就会启动多个“Connector(连接器)”,每个连接器都在等待客户连接,每个连接器都在等待客户机的连接,当有用户使用浏览器去访问服务器上面的web资源时,首先连接到Connecor,Connector是不处理用户请求的,而是将请求交给Engine(引擎)处理,引擎接收到请求后就会解析,并将请求交给相应的host,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 "%r" %s %b" />      </Host>      <Host name="www.hanxin.com" appBase="F:\JavaWebApps">        <Context path="" docBase="F:\JavaWebApps\JavaWebDemo1"/>      </Host>    </Engine>  </Service></Server>


三、互联网加密原理

       Tomcat服务器的连接器分为加密连接器和非加密连接器。上面8080端口用的是非加密连接器(之前的例子用的都是非加密连接器,不多说了)。要配置加密连接器就要弄清楚加密原理。

加密有两种形式:

       1.对称加密

       采用单钥密码系统,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称加密通常在信息发送方需要加密大量数据时使用,对称性加密也成为密钥加密。

所谓对称,就是采用这种加密方法的双方使用同样的秘钥进行加密和解密。秘钥是控制加密和解密过程的指令。算法是一组规则,规定如何进行加密和解密。

加密的安全性不仅取决于加密算法本身,秘钥管理的安全性更重要。因为加密和解密都是用同一个秘钥,如何把密钥安全的传递到解密者手上就成了必须要解决的问题。

       常用的对称加密有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等。

       2.非对称加密

       非对称加密算法需要两个秘钥:公开秘钥和私有秘钥。公开秘钥与私有秘钥是一对,如果用公开秘钥对数据进行加密,只有用对应的私有秘钥才能解密;如果私有秘钥对数据加密,那么只有用对应的公开秘钥才能解密。因为加密和解密使用的是两个不同的秘钥,所以这种算法叫做非对称加密算法。

       非对称加密工作原理:

  1. A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥。
  2. A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。
  3. A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
  4. A将这个信息发送给B
  5. B收到信息后,B用自己的私钥解密A的信息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。
       发送方使用接收到的公钥对数据加密,而接收方则使用自己的私钥解密,这样,信息就可以安全的到达目的地,即使被第三方截获,由于没有相应的私钥,也无法进行解密。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有秘钥才能解密。
       非对称加密依然没有解决数据传输的安全性问题:
       问题1:
       非对称性加密依然没有解决数据传输的安全性问题,比如A想向B发送数据,B首先生成一对秘钥,然后将秘钥发送给A,A拿到B发送给他公钥就可以使用公钥加密数据后发给B,然而在B公钥发送给A的这个过程中,很有可能会被第三方C截获,C截获到B的公钥后,也使用B的公钥加密数据,然后发给B,B接收到数据后,搞不清楚接收到的数据到底是A发的还是C发的。
       问题2:    
       这是其中一个问题,另一个问题就是,C截获到B发的公钥后,C可以自己生成一对秘钥,然后发给A,A拿到公钥后就以为是B发给他的,然后就使用公钥加密数据发给B,发送给B的过程中被C截获下来,由于A是用C发给他的公钥加密数据的,而C又私钥,因此就可以解密A加密过后的内容了,而B没有C的私钥,所以就无法解密。
       那么如何解决这个问题呢?
       只能靠一个第三方机构(CA机构,  即证书授权中心,或称证书授权机构)来担保。A想向B发数据,B首先将公钥发给CA机构,CA机构拿到B的公钥后跑到B的家里问:这是你发的公钥吗?B确认过后说是:没错,是我发的!那么此时CA机构就会为B的公钥做担保,生成一份数字证书给B,数字证书包含了CA的担保认证签名和B的公钥,B拿到CA的这份数字证书后,就发给A,A拿到数字证书后,看到上面有CA的签名,就可以确定当前拿到的是B发的公钥,那么就可以放心大胆的使用公钥加密数据,然后发给B了。

四、https连接器
       理解加密原理之后,我们来看下浏览器和服务器交互时,浏览器如何将数据加密后发送给服务器?首先服务器要向浏览器出示一份数字证书,浏览器得到数字证书后,就可以使用数字证书里面的公钥加密数据发送给服务器。因此,我们要配置服务器,让服务器收到浏览器请求后,会向浏览器出示他的数字证书。
1.生成Tomcat服务器的数字证书
       SUN公司提供了制作证书的工具keytool,使用keytool生成一个名字为tomcat的证书,存放在.keystore这个密钥库中。


命令执行完后,操作系统的用户文件夹下面就会生成一个.keystore文件。

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


2.配置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"/>
keystoreFile="conf/.keystore" 用来指明密钥库文件的所在路径
keystorePass="123456"指明密钥库的访问密码
使用"https://localhost:8443/"访问8443的加密连接器

  由于密钥库里面的证书是我们手工生成的,没有经过CA的认证,所以使用"https://localhost:8443/"访问8443的加密连接器,浏览器会出现"证书错误,导航已阻止",浏览器认为当前要访问的这个主机是不安全的,不推荐继续访问,点击就可以继续访问了,如下图所示:

  


原创粉丝点击