tomcat搭建https服務(非自簽發)


平時做自己的web demo基本上都是用http協議進行訪問。

但是正式情況基本上都是https進行訪問,所以掌握https的配置是很關鍵的。

需要准備的材料:

  一台可以可以外網訪問的遠程服務器

  tomcat 8.5

  java環境(自行百度安裝過程和配置環境變量)

  web項目war包(可有可無)

第一步:

  在遠程服務器上配置好java環境后就是安裝tomcat:

  詳情請見(tomcat安裝、配置、使用):https://www.cnblogs.com/longLifeFrog/articles/8612260.html

  過程是windows的,但是lunix也大同小異,思路基本一樣,可以自行百度搜索相關安裝過程

第二步:

  由於我這台遠程服務器開了2個端口8080和443。

  所以這步要完成用tomcat部署2個不同端口的項目。

  先將webapps文件夾和conf文件夾下面的Catalina文件夾,copy一份,如下圖所示:

  

  

  接下來是修改conf/server.xml:

  

  代碼如下:

<?xml version="1.0" encoding="UTF-8"?>

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />

  <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>

  <Service name="Catalina">
    <!--http配置-->
   <Connector port="8080" protocol="HTTP/1.1"
            connectionTimeout="20000"
            redirectPort="8443" />
    
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    <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>
    </Engine>
  </Service>
  
  <Service name="Catalina2">

    <Connector port="443" protocol="HTTP/1.1" connectionTimeout="20000" maxThreads="150" 
               redirectPort="8443" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"
               keystoreFile="C:\Program Files\Apache Software Foundation\Tomcat 8.5\www.xxxx.com.jks" keystorePass="xxxxxx" 
               />

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    <Engine name="Catalina2" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">

        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps2"
            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>

 

  上圖中8080端口是http形式,如果要將其改成https可以參考443端口的配置。

Connector標簽中的屬性說明:
clientAuth:設置是否雙向驗證,默認為false,設置為true代表雙向驗證
keystoreFile:服務器證書文件路徑
keystorePass:服務器證書密碼
truststoreFile:用來驗證客戶端證書的根證書,此例中就是服務器證書(雖然上圖中並沒有使用,但是自簽發的時候要用到)
truststorePass:根證書密碼(雖然上圖中並沒有使用,但是自簽發的時候要用到)

  上圖中www.xxxx.com.jks是從權威機構拿到的證書,keystorePass填相應的密碼。

第三步:

  copy項目到webapps和webapps2,然后運行startup,訪問。這樣就成功了。

 

 

補充:

  1、http自動跳轉https的安全配置:

    到conf目錄下的web.xml。在 </welcome-file-list>后面, </web-app>之前,也就是倒數第二段里,加上這樣一段:

<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>

結果如下圖所示:

  

這步目的是讓非ssl的connector跳轉到ssl的connector去。所以還需要前往server.xml進行配置:

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

redirectPort改成ssl的connector的端口443,重啟tomcat后便會生效。

 

以上是權威證書的https配置方法。

最后附上使用jdk的keytool工具生成自簽發證書及認證過程(單向和雙向認證都能通):https://www.cnblogs.com/longLifeFrog/p/9069715.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM