【Tomcat8】開啓Https及掛載靜態文件

使用tomcat進行靜態文件掛載(html、image、js等)

通過tomcat home目錄下conf/server.xml文件來進行配置

Server->Service->Connector : 開啓Https的配置

<Connector port="80" protocol="HTTP/1.1"
          connectionTimeout="20000"
          redirectPort="443" />
               
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" 
           SSLEnabled="true" 
           scheme="https" 
           secure="true"
           keystoreFile="/home/admin/.ios-ipa-server/192.168.1.101/server.keystore" 
           keystorePass="123456"
           clientAuth="false" 
           sslProtocol="TLS"
/>
屬性 描述
clientAuth 如果設爲true,表示Tomcat要求所有的SSL客戶出示安全證書,對SSL客戶進行身份驗證
keystoreFile 指定keystore文件的存放位置,可以指定絕對路徑,也可以指定相對於<CATALINA_HOME>(Tomcat安裝目錄)環境變量 的相對路徑。如果此項沒有設定,默認情況下,Tomcat將從當前操作系統用戶的用戶目錄下讀取名爲“.keystore”的文件。
keystorePass 指定keystore的密碼,如果此項沒有設定,在默認情況下,Tomcat將使用“changeit”作爲默認密碼。
sslProtocol 指定套接字(Socket)使用的加密/解密協議,默認值爲TLS,用戶不應該修改這個默認值。
ciphers 指定套接字可用的用於加密的密碼清單,多個密碼間以逗號(,)分隔。如果此項沒有設定,在默認情況下,套接字可以使用任意一個可用的密碼。

生成自己的keystore

keytool -genkey -alias server.keystore -keyalg RSA -validity 36500 -keystore server.keystore -v

注:

-genkey 	:生成文件
-alias 		:別名,證書項的名字,必填項;
-keyalg 	:加密算法,證書籤名算法,tomcat建議RSA
-validity  	:證書有效期,36500天,即100年
-storepass 	:密鑰庫密碼,也就是等下要生成的keystore的訪問密碼,妥善保管
-keystore	:要生成的文件的位置(相對路徑或絕對路徑)
-v:		:顯示比較詳細的信息 

添加新密鑰對的操作
keytool -genkeypair -alias test -keyalg RSA -validity 36500 -storepass 123456 -keystore ./server.keystore

查看keystore中的項

keytool -list -keystore ./test.keystore

C:\Users\jayzhen>keytool -list -keystore ./server.keystore
輸入密鑰庫口令:

密鑰庫類型: JKS
密鑰庫提供方: SUN

您的密鑰庫包含 2 個條目

server.keystore, 2019-7-29, PrivateKeyEntry,
證書指紋 (SHA1): FA:86:55:56:B1:B4:4F:63:B9:16:7C:D4:F9:1F:B3:26:CB:B1:85:45
test, 2019-7-29, PrivateKeyEntry,
證書指紋 (SHA1): 6C:FF:64:18:FB:20:2F:3C:25:D6:8D:2F:FB:5E:AA:B5:C3:B9:88:89

導出證書

keytool -exportcert -alias test -file ./test.cer -storepass 123456 -keystore ./server.keystore -v

-alias test:要導出的證書的名字,即剛纔創建的密鑰的名字,即keytool -list時顯示的名字
-file ./test.cer:要導出的證書的存儲位置,這裏我放在當前目錄下
-keystore ./server.keystore:剛纔創建的密鑰庫的位置 

使用證書

  1. copy密鑰庫文件test.cer
  2. 將剛纔生成的密鑰庫文件test.cer copy到你tomcat的conf目錄,跟server.xml同級。
    注意:這裏一定要放在你實際運行的tomcat的conf目錄下。

配置tomcat(開頭那個已經展示了,這裏略)

關於瀏覽器配置

一個網站使用https的證書一般都是通過購買公衆證書,所以瀏覽器無法認證,所以此時只需要將剛纔導出的證書,也就是test.cer導入操作系統即可,雙擊證書。還有一個問題是一個密鑰庫裏放多個密鑰,可能會導致tomcat無法識別導致的,所以這不是個問題。

注意:關於配置https操作方式,tomcat版本不同,會有不同的操作方式,具體參考官網文檔。從tomcat8.5開始tomcat更改了配置形式,如上配置估計在tomcat10的時候會完全廢棄,在tomcat9.0下測試成功的配置如下:

<!-- 在tomcat9下配置->
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="443" />
<Connector port="443" protocol="org.apache.coyote.http11.Http11Nio2Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/test.keystore" certificateKeystorePassword="123456" />
    </SSLHostConfig>
</Connector>

補充靜態文件掛載(源文件)

<?xml version='1.0' encoding='utf-8'?>

<Server port="9005" 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">
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
			   keystoreFile="/home/admin/.ios-ipa-server/192.168.18.85/server.keystore" keystorePass="123456"
               clientAuth="false" sslProtocol="TLS" />
    
    <Connector port="9009" 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" />
       <Context path="/download" reloadable="true" docBase="/Users/admin/data/ftp/data/ota"/>
      </Host>
    </Engine>
  </Service>
</Server>

使用context標籤來指定靜態文件的位置path指定url訪問路徑,直接映射到docBase路徑下,功能可參考nginx。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章