tomcat 容器下web項目由http改為https操作步驟及相關的坑


一、https介紹:
     HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。 它是一個URI scheme(抽象標識符體系),句法類同http:體系。用於安全的HTTP數據傳輸。https:URL表明它使用了HTTPS,但HTTPS存在不同於HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。這個系統的最初研發由網景公司進行,提供了身份驗證與加密通訊方法,現在它被廣泛用於萬維網上安全敏感的通訊,例如交易支付方面

二、https與http區別:

    1、https協議需要到ca申請證書,一般免費證書很少,需要交費。

  2、http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。

  3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。       

  4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

三、SSL協議:

  SSL安全套接層協議(Secure Socket Layer)

  為Netscape所研發,用以保障在Internet上數據傳輸之安全,利用數據加密(Encryption)技術,可確保數據在網絡上之傳輸過程中不會被截取及竊聽。目前一般通用之規格為40 bit之安全標准,美國則已推出128 bit之更高安全標准,但限制出境。只要3.0版本以上之IE.或Netscape瀏覽器即可支持SSL。

  當前版本為3.0。它已被廣泛地用於Web瀏覽器與服務器之間的身份認證和加密數據傳輸。

SSL協議位於TCP/IP協議與各種應用層協議之間,是一種國際標准的加密及身份認證通信協議,為TCP提供一個可靠的端到端的安全服務,為兩個通訊個體之間提供保密性和完整性(身份鑒別)。SSL協議可分為兩層:SSL記錄協議(SSL Record Protocol):它建立在可靠的傳輸協議(如TCP)之上,為高層協議提供數據封裝、壓縮、加密等基本功能的支持。SSL握手協議(SSL Handshake Protocol):它建立在SSL記錄協議之上,用於在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。

四、TOMCAT 配置https:
  1、生成服務器端證書文件(僅用於開發和測試,如用於對外服務的商業網站會提示不安全之類的問題)

  可以使用Windows系統或者Linux系統(以Windows系統為例,Linux系統雷同,只是命令行輸入信息時可能是英文)
  (1)    Windows環境生成證書
    步驟:
  • 進入%JAVA_HOME%/bin目錄
  • 執行命令
    keytool -genkey -alias tomcat -keyalg RSA -keystore F:\tomcat.keystore -validity 365
  • 參數簡要說明:“F:\tomcat.keystore”含義是將證書文件保存在F盤,證書文件名稱是tomcat.keystore ;“-validity 36500含義是證書有效期,單位是天,默認值90
  • 在命令行填寫必要的參數(jdk版本不同可能稍有不同):
    A、輸入密匙庫口令:此處需要輸入大於6個字符的字符串
    B、“您的名字與姓氏是什么?”這是必填項,並且必須是TOMCAT部署主機的域名或者IP[如:gbcom.com 或者 10.1.25.251],就是你將來要在瀏覽器中輸入的訪問地址
     C、 “你的組織單位名稱是什么?”、“您的組織名稱是什么?”、“您所在城市或區域名稱是什么?”、“您所在的州或者省份名稱是什么?”、“該單位的兩字母國 家代碼是什么?”可以按照需要填寫也可以不填寫直接回車,在系統詢問“正確嗎?”時,對照輸入信息,如果符合要求則使用鍵盤輸入字母“y”,否則輸入“n”重新填寫上面的信息
    D、輸入<tomcat>的主密碼,這項較為重要,會在tomcat配置文件中使用,建議輸入與keystore的密碼一致,設置其它密碼也可以
      完成上述輸入后,直接回車則在你在配置的位置找到生成的文件
 (2)、商業網站的證書申請:參考https://blog.csdn.net/qq_19558705/article/details/60756689
2、配置TOMCAT服務器
(1)    如果你是在Windows環境中生成證書文件,則需要將生成的證書tomcat.keystore拷貝到Tomcat將要引用的位置,假設tomcat的應用證書的路徑是“/etc/tomcat.keystore”,則需要將證書文件拷貝到“etc/”下;如果是在Linux環境按照上述介紹的步驟生成證書文件的話,此時證書文件已經在“etc/”下。
(2)    配置Tomcat,打開$CATALINA_HOME/conf/server.xml,修改如下,
    這是原來的配置,http訪問端口
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    去掉原本注釋掉的https配置的注釋並修改為以下配置
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" keystoreFile="/etc/tomcat.keystore" keystorePass="www.test.cn"/>

    

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

 

    主要修改:1、去掉注釋;2、增加keystoreFile和keystorePass兩個參數,分別表示證書文件的路徑和密碼(之前申請證書時輸入的tomcat密碼)

    注意事項:1、8443端口同時是上面http配置的8080端口的redirectPort,表示http請求會跳轉到8443的https

         2、8080、8009兩個端口配置根據實際需求修改

         3、網上有些文章提到https默認是443,tomcat是8443,這個具體有什么影響和特別需要注意的地方我尚未知,后續碰到再說

 

2.修改項目的web.xml文件,並強制https訪問
  在web應用的web.xml文件中修改並加上下面配置:

<!--強制使用https,http請求會自動轉為https-->
<login-config>
    <auth-method>CLIENT-CERT</auth-method>
    <realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<!--配置網站支持https,/* 表示全部請求都走https, transport-guarantee 標簽設置為 CONFIDENTIAL 以便使應用支持 SSL。
如果需要關閉 SSL ,將 CONFIDENTIAL 改為 NONE 即可-->
<security-constraint>
    <web-resource-collection>
        <web-resource-name>securedapp</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

  修改tomcat\conf\web.xml文件也可,對該tomcat下所有程序生效

3、上述配置完成后,重啟TOMCAT后即可以使用SSL。IE地址欄中可以直接輸入地址不必輸入http://” 或者 https://” ;也可以輸入 “http:// ” 會跳轉成為 “https://” 來登錄
4、注意事項與坑:
(1) 、生成證書的時間,如果IE客戶端所在機器的時間早於證書生效時間,或者晚於有效時間,IE會提示“該安全證書已到期或還未生效”

(2) 、如果IE提示“安全證書上的名稱無效或者與站點名稱不匹配”,則是由生成證書時填寫的服務器所在主機的域名“您的名字與姓氏是什么?”/“What is your first and last name?”不正確引起的

 (3)、在一次改為https的改動實驗后,改回http,將之前所有的改動都還原了,但是程序就是異常,能正常打開登錄頁面但是登錄報錯(由於程序邏輯的原因,沒有任何有效的日志可以查看到該問題的原因),折騰了2個小時,后來清空了瀏覽器緩存重新登錄就正常了,推測是緩存記錄的是https的session,使用http訪問后無法獲取到session的有效信息。其實只需要另外一台電腦或者瀏覽器訪問一下可能早就發現該原因了,坑爹。

 (4)、如果需要在原端口上提供https服務,直接將8443端口改為原端口如8080,但是同一個端口無法同時提供http和https兩種服務。且這樣修改后,強制http跳轉到https的配置也失效了,只能通過其他辦法跳轉,如使用Nginx等轉發(尚未實驗)

 

轉載並修改至:http://blog.sina.com.cn/s/blog_618592ea01012q40.html

謝謝。


免責聲明!

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



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