Tomcat配置HTTPS协议详细教程(上)

一:概念简介

     Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。

     HTTP 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。

     HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。

     HTTPS和HTTP的区别:

  •     HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。
  •     HTTPS 协议需要到 CA 申请证书,一般免费证书很少,需要交费。
  •     HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
  •     HTTP 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

 

 

二:为服务器生成证书

        HTTPS 如果生产环境应用在域名上是需要直接或间接的从 CA 申请证书,来取得浏览器的信任的。我们先在本地模拟测试一下这个过程,自己使用jdk的keytool工具生成证书。

 

2.1 找到自己的%JAVA_HOME%/bin目录

          计算机---->属性---->高级系统配置---->系统属性

 

 

2.2 生成服务器证书 

   (1)打开DOS窗口,通过命令进入到jdk的bin目录下。(C:\Program Files\Java\jdk1.8.0_60)

    (2)创建存放生成证书的文件夹(G:\tomcat_cer)

    (3)执行命令:  keytool -genkey -v -alias tomcat -keyalg RSA -keystore G:\tomcat_cer\tomcat.keystore -validity 36500

            参数说明: G:\tomcat_cer\  -->自己创建的存放证书的文件夹  ; tomcat.keystore -->生成的证书名称  ; validity 36500  -->证书有效期,36500表示100年,默认值是90天 

   (4)密钥库口令: password(这个密码非常重要,要求大于6个字符)

            名字与姓氏:192.168.0.105(以后访问的域名或IP地址,非常重要,证书和域名或IP绑定)
            组织单位名称,组织名称,城市,省市自治区,国家地区代码(随便填)

   (5)打印  [正在存储G:\tomcat_cer\tomcat.keystore]   ,证书生成完成

 

  

 

 

三:配置tomcat服务器

 3.1 打开tomcat配置文件,如:D:/apache-tomcat/conf/server.xml,修改如下:

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8003" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  
  <!-- 修改第一步:注释 className="org.apache.catalina.core.AprLifecycleListener" -->
  <!--<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />   -->
  
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  
  <!-- 修改第二步:redirectPort端口改为443 (port端口,根据自己需要设置即可) -->
  <Service name="Catalina">
    <Connector port="11000" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443" />
               
  <!-- 修改第三步:增加enableLookups="false"  (port端口,根据自己需要设置即可) -->
    <Connector port="8002" enableLookups="false" protocol="AJP/1.3" redirectPort="443" />
    
  <!-- 修改第四步:去掉注释且修改keystoreFile(证书文件的位置)、keystorePass(<tomcat>的主密码即刚刚设置的证书密码) 两个参数  -->
  <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" keystoreFile="G:\tomcat_cer/tomcat.keystore" keystorePass="password"/>

   <!-- 修改结束  -->
    
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <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="127.0.0.1"  appBase="phpwebapps"
            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>
    </Engine>
  </Service>
</Server>

 

       

3.2 打开tomcat配置文件,如:D:/apache-tomcat/conf/web.xml,在该文件</welcome-file-list>后面添加一段:

   <!--配置证书开始-->
  <login-config> 
     <!-- Authorization setting for SSL --> 
    <auth-method>CLIENT-CERT</auth-method> 
    <realm-name>Client Cert Users-only Area</realm-name> 
  </login-config> 
  <security-constraint> 
    <!-- Authorization setting for SSL --> 
    <web-resource-collection > 
       <web-resource-name >SSL</web-resource-name> 
       <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
       <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
  </security-constraint>
  <!--配置证书结束-->

 

 3.3 启动tomcat服务器,访问系统

      使用以前保存的地址去访问,我们发现,默认的已经变成https协议了,但是没用权限访问,接下来,我们继续,为客户端生成证书

 

三:为客户端生成证书

        具体步骤参考2.2,这里就不过多描述了(    keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore G:\tomcat_cer\tomcat.p12   )  

3.1 生成客户端p12证书

 

 

3.2 把客户端p12证书转为.cer格式证书

      具体步骤参考2.2,这里就不过多描述了(   keytool -export -alias mykey -keystore  G:\tomcat_cer\tomcat.p12  -storetype PKCS12 -storepass password -rfc -file G:\tomcat_cer\tomcat.cer  )   

      执行成功之后,我们在文件夹中可以看到相关证书

 

 

四:让服务器信任客户端证书(详见教程下)

 

 

 

 

 

 

 

                             

   

    

posted @ 2020-06-17 10:39  Z_sun  阅读(1070)  评论(0编辑  收藏  举报