1. 程式人生 > >使用阿里雲配置Tomcat Https(注意不同tomcat8.5版本配置不同)

使用阿里雲配置Tomcat Https(注意不同tomcat8.5版本配置不同)

使用阿里雲Https配置Tomcat(注意tomcat8.5版本配置不同)

前言

我們知道jdk自帶的keytool工具可以幫助提供https支援,使用下面命令:

 

生成伺服器證書,有效時間100年、證書別名為serverkey、生成檔名為server.keystore:

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

 

生成客戶端證書,有效時間100年、證書別名為clientkey 、生成檔名為client.p12:

  • keytool -genkey -v -alias clientkey -keyalg RSA -storetype PKCS12 -keystore client.p12 -validity 36500

 

根據客戶端證書(證書別名是clientkey、檔案為client.p12)生成客戶端p12證書信任檔案,生成檔名為client.cer、密碼為197347:

  • keytool -export -alias clientkey -keystore client.p12 -storetype PKCS12 -storepass 197347 -rfc -file client.cer

 

將信任證書匯入到伺服器server.keystore中:

  • keytool -import -v -file client.cer -keystore server.keystore
     
修改server.xml:
  • <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="/opt/apache-tomcat-8.0.3/cert/tomcat.keystore" keystorePass="197347" />
clientAuth 是否開啟客戶端證書驗證(雙向認證) true 開啟, false關閉。如果clientAuth 為 true. 那麼客戶端需有 client.p12檔案才能訪問tomcat伺服器。

但是這種方式訪問域名時,瀏覽器會標識“證書風險”,並且預設不會載入非HTTPS域名下的JavaScript。我們需要正規的證書。

 

1.申請免費https證書(由Symantec提供)

登入控制檯,找到證書服務,後面就直接安裝指示一步步進行就可以了。

 

2.配置https

        拿到證書之後,進行下載,選擇“下載證書for Tomcat”。因此我們會得到一個壓縮檔案,需要的證書都在裡面了。接下來我們進行https的配置,配置這兒是個大坑,博主在這兒繞了幾段彎路。由於tomcat8及以上和以下的https配置完全不同,而且阿里雲https證書安裝分pfx格式和jks格式兩種,因此就存在以下四種配置:
 

配置情況一(tomcat8以下+pfx):

    • 這種配置是最容易的,按照阿里雲https證書安裝過程做,一般不會出現什麼問題。我的配置:

      <Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" 
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true" 
          keystoreFile="cert/你的pfx證書檔案.pfx"  keystorePass="你的證書密碼(pfx-password.txt檔案中)" 
           clientAuth="false" sslProtocol="TLS" 
          ciphers="TLS_RSA_WITH_AES_128_GCM_SHA256, 
                    TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 
                    TLS_RSA_WITH_AES_128_CBC_SHA, 
                    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, 
                    TLS_RSA_WITH_AES_128_CBC_SHA256, 
                    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, 
          SSL_RSA_WITH_3DES_EDE_CBC_SHA, 
          TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" />

配置情況二(tomcat8以下+jks):

    • 同上,只是把“你的pfx證書檔案.pfx”和密碼換成jks相關即可。注意,如果發現配置完成之後,啟動tomcat啟動443時報“Password verification failed”的錯誤,有兩點原因可以考慮: 1.你的jks證書密碼是否和金鑰庫密碼一致(阿里雲建議兩者一致); 2.使用jdk自帶工具keytool生產證書時可能密碼會預設成“changeit”,把你的密碼換成這個試試。一般使用阿里雲上申請的證書時,我儘量不使用keytool來轉換jks證書。因為正如上面所說,證書密碼可能會預設成“changeit”。而證書密碼和金鑰庫密碼不一致又可能出現“Cannot recover key”錯誤(金鑰庫密碼給你時就已經定好了)。因此你會陷入一個進退兩難的地步(當然肯定也有解決辦法,只是為了避免不必要的麻煩,而且tomcat7以上開始支援pfx證書)。

配置情況三(tomcat8及以上+jks):

    • <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> 
      <SSLHostConfig> 
      <Certificate certificateKeystoreFile="cert\你的jks證書檔案" certificateKeyAlias="alias" certificateKeystorePassword="證書密碼" type="RSA" /> 
      </SSLHostConfig>
      </Connector>
    • 證書別名是需要的,預設就是“alias”,你也可以在生成jks檔案指定別名:keytool -importkeystore -srckeystore 你的pfx證書.pfx -alias 你的證書別名 -destkeystore 你的jks證書名.jks -srcstoretype PKCS12 -deststoretype JKS
    • 你也可以檢視你的證書別名:

      keytool -list -keystore jks檔案 -storepass jks密碼

配置情況四(tomcat8及以上+pfx):

    • 參照上面,略

再訪問https域名,就沒毛病了:

 

3.最後

還有一個小坑就是,linux上記得把防火牆443埠或8443埠開啟,否則一直都是連線不上的。/etc/sysconfig/iptables 檔案加上:

# https default

-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

重啟防火牆:service iptables restart

 

當然,如果你正在使用Apache或者Nginx做反向代理或負載均衡,那就可以直接在Apache或Nginx中配置https即可,Tomcat就可以不用管它了。

--------------------- 本文來自 冉椿林的部落格 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/localhost01/article/details/70836977?utm_source=copy