一、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、生成服務器端證書文件(僅用於開發和測試,如用於對外服務的商業網站會提示不安全之類的問題)
- 進入%JAVA_HOME%/bin目錄
- 執行命令
- 參數簡要說明:“F:\tomcat.keystore”含義是將證書文件保存在F盤,證書文件名稱是tomcat.keystore ;“-validity 36500”含義是證書有效期,單位是天,默認值90
- 在命令行填寫必要的參數(jdk版本不同可能稍有不同):
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<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下所有程序生效
(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
謝謝。