http[1]是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是一種應用層協議,可用於將超文本服務器中文本、圖片、音視頻等內容傳輸到客戶端瀏覽器。html
構建與互聯網之上的萬維網,其主要組成部分就是http協議。目前使用的最普遍的http協議版本是http1.1。linux
最初的HTTP協議是萬維網1991年誕生時,蒂姆·伯納斯·李爵士(Sir Tim Berners-Lee)在European Organization for Nuclear Research使用的協議。以後萬維網協會(World Wide Web Consortium)和Internet工做小組(Internet Engineering Task Force)合做,並最終發佈了一系列的RFC,其中最著名的就是RFC 2616。RFC 2616定義了咱們今天廣泛使用的HTTP協議的一個版本——HTTP1.1。web
在TCP/IP參考模型中和OSI參考模型中,http協議處於應用層的位置,http規定了客戶端和Web服務端的通訊協議,而html則規定了傳輸的內容的格式、類型。https是在http的基礎上,增長了TLS/SSL協議,爲通訊內容進行加密操做。算法
http協議默認使用TCP的80端口進行通訊。經過在瀏覽器中輸入網站地址,URL (Uniform Resource Locator,統一資源定位符)[2],發起http請求。shell
URL由三部分組成:資源類型、存放資源的主機域名、資源文件名。URL的通常語法格式爲:apache
protocol:// hostname[:port]/path/[;parameters][?query]#fragmentwindows
其中帶方括號[]的爲可選項。瀏覽器
使用http協議,則url能夠表示爲tomcat
http://www.xxx.com/index.html?type=main。安全
在一次完整的http通訊中,會通過以下幾個過程[3]:
請求體和應答數據,都是二進制數據。經過content-type指定其格式內容以及編碼。
關於http的具體信息可參考HTTP 教程中的內容。
http的簡答方便,在網絡應用中廣發使用,同時http仍是存在着缺點的[4]。
爲了解決http的以上問題,瀏覽器可使用https對http的全部內容進行加密,保證了
https並不是是應用層的一種新協議,它只是在http通訊接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)協議代替而已。
瀏覽器使用http時,直接同tcp通訊;當瀏覽器使用https時,瀏覽器會先同TLS/SSL進行通訊,而後TLS/SSL再同tcp進行通訊。
在使用TLS/SSL後,http便擁有了加密功能。TLS/SSL是獨立於http的協議,因此其也能夠同應用層的其餘協議配合使用。
SSL由從前的網景公司開發,有1,2,3三個版本,但如今只使用版本3。
TLS是SSL的標準化後的產物,有1.0 1.1 1.2三個版本。主流瀏覽器都已經實現了TLS 1.2的支持。
TLS 1.0一般被標示爲SSL 3.1,TLS 1.1爲SSL 3.2,TLS 1.2爲SSL 3.3。SSL是TLS舊的稱呼。
因爲習慣問題,雖然如今都是使用TLS,但一直統稱爲TLS/SSL。
對傳輸內容進行加密,是增長http通訊安全的第一步。
能夠採用對稱加密(DES,AES),也能夠採用非對稱加密(RSA,DSA)。此外還有數字簽名技術(MD5,SHA)。
對稱加密相比非對稱加密,速度更快,須要的計算量更少。
https通訊過程當中使用到了對稱加密、非對稱加密和數字簽名技術。
其中非對稱加密,在目前已有算力的狀況下是沒法破解的。原理是,兩個大素數相乘十分容易,但想要對其乘積進行因式分解卻極其困難。這兩個大素數,就是非對稱加密中的公鑰、私鑰。
在未使用數字證書保證服務端的公鑰正確性時,依然存在中間人攻擊的可能性,只要中間人做爲客戶端同實際服務端進行通訊,做爲服務端同實際客戶端進行通訊便可。客戶端沒有任何方法判斷服務端發送過來的公鑰是否爲真正的公鑰。因而在https通訊中,使用到了數字證書,用於保證客戶端能夠得到正確的服務端公鑰。
數字證書是一個經證書受權中心數字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。最簡單的證書包含一個公開密鑰、名稱以及證書受權中心的數字簽名。數字證書還有一個重要的特徵就是隻在特定的時間段內有效。
數字證書是一種權威性的電子文檔,能夠由權威公正的第三方機構,即CA(例如中國各地方的CA公司)中心簽發的證書,也能夠由企業級CA系統進行簽發。
數字證書頒發過程通常爲:
客戶端得到了數字證書,經過使用認證中心的公鑰對證書中用戶的跟人信息以及公鑰信息的數字摘要進行解密,得到數字簽名,同證書中的數字簽名進行對比,便可驗證此證書的正確性。
經過證書認證鏈,能夠得到指定認證中心的公鑰。
證書中有頒發者的信息,以及其認證中心的信息,經過此種方式,能夠得到一個認證中心的認證鏈。
在認證鏈的最頂端是根認證中心,根認證中心的數字證書通常都是已經內置在操做系統或者瀏覽器中了,表示對此證書的絕對信任。
經過根證書能夠驗證其子認證中心的證書的正確性,從而得到子認證中心的公鑰,以此類推,直到得到指定認證中心的公鑰。
* 證書:.crt .cer .pem
* 私鑰:.key
* 證書請求:.csr
把證書和私有key 放到同一個文件裏邊,這時候擴展名一般叫.pem。Java的keystore是自有格式。在生成私鑰公鑰後,若是須要申請證書,須要生成csr文件。
經過以上內容,可以初步瞭解https以及數字證書的工做原理。
在https通訊中,比原有的http通訊,多了三個元素:公鑰、私鑰、證書。其中證書包含公鑰內容。
一、首先使用jdk自帶的keytool工具生成證書。[8]
在windows的powershell或者linux的shell中,鍵入一下命令(keystore是證書保存位置)
keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "D:\tomcat.keystore"
根據提示輸入必要的信息。
密鑰庫口令:123456(這個密碼很是重要) 名字與姓氏:192.168.0.110(之後訪問的域名或IP地址,很是重要,證書和域名或IP綁定) 組織單位名稱:anything(隨便填) 組織名稱:anything(隨便填) 城市:anything(隨便填) 省市自治區:anything(隨便填) 國家地區代碼:anything(隨便填)
最後「是否正確?」中鍵入「y」和回車。此時證書已生成。
二、應用證書到tomcat
修改tomcat中的conf/server.xml文件。
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="D:/tomcat.keystore" keystorePass="123456" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
三、測試tomcat的https
啓動tomcat,在瀏覽器中輸入https協議格式的url地址。
[1]. http://baike.baidu.com/item/http
[2]. http://baike.baidu.com/link?url=GMLo1XhB34TUkdKPEXewjpBYsECNMqp4o0jYqTNZuTYYTJDoDVIomoWdDRlavPCaWpOH8cBDMy7vdpZELSMrrOxnRhfNt4kuoiSWYRYMUgO
[3]. http://blog.csdn.net/u013087513/article/details/49465597
[4]. http://book.51cto.com/art/201404/436093.htm
[5]. http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
[6]. http://baike.baidu.com/item/%E6%95%B0%E5%AD%97%E8%AF%81%E4%B9%A6
[7]. http://www.2cto.com/article/201203/122095.html
[8]. http://blog.csdn.net/xiaojunhu/article/details/8263687
[9]. http://blog.sina.com.cn/s/blog_503506460100mdvt.html