https詳解

SSL (Secure Socket Layer)
mysql

HTTPS(Secure Hypertext Transfer Protocol)安全超文本傳輸協議
算法

 

https協議詳解
      HTTPS以保密爲目標研發,簡單講是HTTP的安全版。其安全基礎是SSL協議,所以加密的詳細內容請看SSL。全稱Hypertext Transfer Protocol over Secure Socket Layer。
 
      它是一個URI scheme,句法類同http:體系。它使用了HTTP,但HTTPS存在不一樣於HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。這個協議的最初研發由網景公司進行,提供了身份驗證與加密通信方法,如今它被普遍用於互聯網上安全敏感的通信,例如交易支付方面。
 
      SSL極難竊聽,對中間人攻擊提供必定的合理保護。嚴格學術表述HTTPS是兩個協議的結合,即傳輸層SS+應用層HTTP。
HTTPS默認使用TCP端口443(HTTP默認則是TCP端口80),也能夠指定其餘TCP端口。
要使協議正常運做,至少服務器必需有PKI證書,而客戶端則不必定。
它的加密強度依賴軟件的正確實現,以及服務器客戶端雙方加密算法的支持。
 
即使HTTPS被正確實現,仍有如下人爲因素:
冒充網站 
釣魚攻擊 
        製造與原網站類似的假冒網址,並誘導客戶訪問,常見例子是仿製銀行網站。 
 
中間人攻擊 
       在通信線路中途篡改證書,從而充當網站客戶雙方的中間人,這樣可知道所有通信內容。檢查證書纔有可能發現中間人的存在。 
 
冒充客戶 
       因爲證書費用昂貴,一般只有網站服務器擁有證書。每每客戶身份得不到驗證。 
        在TLS 1.1以前SSL證書僅能對應IP,使得HTTPS沒法在虛擬主機(僅有域名)上正常運做。如今的TLS 1.1早已徹底支持基於域名的虛擬主機。
 
HTTPS和HTTP的區別: 
https協議須要到ca申請證書,通常免費證書不多,須要交費。 
http是超文本傳輸協議,信息是明文傳輸,https 則是具備安全性的ssl加密傳輸協議 
http和https使用的是徹底不一樣的鏈接方式用的端口也不同,前者是80,後者是443。 
http的鏈接很簡單,是無狀態的 
HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議 要比http協議安全sql

HTTPS解決的問題: 
1 . 信任主機的問題. 採用https 的server 必須從CA 申請一個用於證實服務器用途類型的證書. 改證書只有用於對應的server 的時候,客戶度纔信任次主機. 因此目前全部的銀行系統網站,關鍵部分應用都是https 的. 客戶經過信任該證書,從而信任了該主機. 其實這樣作效率很低,可是銀行更側重安全. 這一點對咱們沒有任何意義,咱們的server ,採用的證書無論本身issue 仍是從公衆的地方issue, 客戶端都是本身人,因此咱們也就確定信任該server.數據庫

2 . 通信過程當中的數據的泄密和被竄改 
1. 通常意義上的https, 就是 server 有一個證書. 
a) 主要目的是保證server 就是他聲稱的server. 這個跟第一點同樣. 
b) 服務端和客戶端之間的全部通信,都是加密的. 
i. 具體講,是客戶端產生一個對稱的密鑰,經過server 的證書來交換密鑰. 通常意義上的握手過程. 
ii. 加下來全部的信息往來就都是加密的. 第三方即便截獲,也沒有任何意義.由於他沒有密鑰. 固然竄改也就沒有什麼意義了.瀏覽器

2. 少量對客戶端有要求的狀況下,會要求客戶端也必須有一個證書. 
a) 這裏客戶端證書,其實就相似表示我的信息的時候,除了用戶名/密碼, 還有一個CA 認證過的身份. 應爲我的證書通常來講上別人沒法模擬的,全部這樣可以更深的確認本身的身份.
b) 目前少數我的銀行的專業版是這種作法,具體證書多是拿U盤做爲一個備份的載體.
 
HTTPS 必定是繁瑣的. 
a) 原本簡單的http協議,一個get一個response. 因爲https 要還密鑰和確認加密算法的須要.單握手就須要6/7 個往返. 
i. 任何應用中,過多的round trip 確定影響性能. 
b) 接下來纔是具體的http協議,每一次響應或者請求, 都要求客戶端和服務端對會話的內容作加密/解密. 
i. 儘管對稱加密/解密效率比較高,但是仍然要消耗過多的CPU,爲此有專門的SSL 芯片. 若是CPU 信能比較低的話,確定會下降性能,從而不能serve 更多的請求.
ii. 加密後數據量的影響. 因此,纔會出現那麼多的安全認證提示安全

 

 

 

https協議分析
       HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,所以加密的詳細內容就須要SSL。 它是一個URI scheme(抽象標識符體系),句法類同http:體系。用於安全的HTTP數據傳輸。https:URL代表它使用了HTTP,但HTTPS存在不一樣於HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。這個系統的最初研發由網景公司進行,提供了身份驗證與加密通信方法,如今它被普遍用於萬維網上安全敏感的通信,例如交易支付方面。
 
簡單介紹:
       它是由Netscape開發並內置於其瀏覽器中,用於對數據進行壓縮和解壓操做,並返回網絡上傳送回的結果。HTTPS實際上應用了Netscape的安全套接字層(SSL)做爲HTTP應用層的子層。(HTTPS使用端口443,而不是象HTTP那樣使用端口80來和TCP/IP進行通訊。)SSL使用40 位關鍵字做爲RC4流加密算法,這對於商業信息的加密是合適的。HTTPS和SSL支持使用X.509數字認證,若是須要的話用戶能夠確認發送者是誰。   
 
      也就是說它的主要做用能夠分爲兩種:一種是創建一個信息安全通道,來保證數據傳輸的安全;另外一種就是確認網站的真實性。
 
HTTPS和HTTP的區別
1、https協議須要到ca申請證書,通常免費證書不多,須要交費。   2、http是超文本傳輸協議,信息是明文傳輸,https 則是具備安全性的ssl加密傳輸協議。   3、http和https使用的是徹底不一樣的鏈接方式,用的端口也不同,前者是80,後者是443。   4、http的鏈接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
 
協議結構
       HTTP報文由從客戶機到服務器的請求和從服務器到客戶機的響應構成。請求報文格式以下:
  請求行 - 通用信息頭 - 請求頭 - 實體頭 - 報文主體   請求行以方法字段開始,後面分別是 URL 字段和 HTTP 協議版本字段,並以 CRLF 結尾。SP 是分隔符。除了在最後的 CRLF 序列中 CF 和 LF 是必需的以外,其餘均可以不要。有關通用信息頭,請求頭和實體頭方面的具體內容能夠參照相關文件。   應答報文格式以下:   狀態行 - 通用信息頭 - 響應頭 - 實體頭 - 報文主體   狀態碼元由3位數字組成,表示請求是否被理解或被知足。緣由分析是對原文的狀態碼做簡短的描述,狀態碼用來支持自動操做,而緣由分析用來供用戶使用。客戶機無需用來檢查或顯示語法。有關通用信息頭,響應頭和實體頭方面的具體內容能夠參照相關文件。
 
HTTPS解決的問題
1、信任主機的問題.
  採用https的服務器必須從CA (Certificate Authority)申請一個用於證實服務器用途類型的證書。該證書只有用於對應的服務器的時候,客戶端纔信任此主機。因此目前全部的銀行系統網站,關鍵部分應用都是https 的。客戶經過信任該證書,從而信任了該主機。其實這樣作效率很低,可是銀行更側重安全。這一點對咱們沒有任何意義,咱們的服務器,採用的證書無論是本身發佈的仍是從公衆的地方發佈的,其客戶端都是本身人,因此咱們也就確定信任該服務器。2、通信過程當中的數據的泄密和被篡改
 
2、通信過程當中的數據的泄密和被篡改
1. 通常意義上的https,就是服務器有一個證書。
a) 主要目的是保證服務器就是他聲稱的服務器,這個跟第一點同樣.
b) 服務端和客戶端之間的全部通信,都是加密的。
  i. 具體講,是客戶端產生一個對稱的密鑰,經過服務器的證書來交換密鑰,即通常意義上的握手過程。
  ii. 接下來全部的信息往來就都是加密的。第三方即便截獲,也沒有任何意義,由於他沒有密鑰,固然篡改也就沒有什麼意義了。
 
2. 少量對客戶端有要求的狀況下,會要求客戶端也必須有一個證書。
a) 這裏客戶端證書,其實就相似表示我的信息的時候,除了用戶名/密碼,還有一個CA 認證過的身份。由於我的證書通常來講是別人沒法模擬的,全部這樣可以更深的確認本身的身份。
b) 目前少數我的銀行的專業版是這種作法,具體證書多是拿U盤(即U盾)做爲一個備份的載體.
 
 
概述
  它的安全保護依賴瀏覽器的正確實現以及服務器軟件、實際加密算法的支持.
  一種常見的誤解是「銀行用戶在線使用https:就能充分完全保障他們的銀行卡號不被偷竊。」實際上,與服務器的加密鏈接中能保護銀行卡號的部分,只有用戶到服務器之間的鏈接及服務器自身。並不能絕對確保服務器本身是安全的,這點甚至已被攻擊者利用,常見例子是模仿銀行域名的釣魚攻擊。少數罕見攻擊在網站傳輸客戶數據時發生,攻擊者會嘗試竊聽傳輸中的數據。
 
  商業網站被人們指望迅速儘早引入新的特殊處理程序到金融網關,僅保留傳輸碼(transaction number)。不過他們經常存儲銀行卡號在同一個數據庫裏。那些數據庫和服務器少數狀況有可能被未受權用戶攻擊和損害。TLS 1.1以前
 
  這段僅針對TLS 1.1以前的情況。由於SSL位於http的下一層,並不能理解更高層協議,一般SSL服務器僅能頒證給特定的IP/端口組合。這是指它常常不能在虛擬主機(基於域名)上與HTTP正常組合成HTTPS。
 
  這一點已被即未來臨的TLS 1.1更新爲—種徹底支持基於域名的虛擬主機。服務器

 

 

 

SSL介紹
  SSL (Secure Socket Layer)
  爲Netscape所研發,用以保障在Internet上數據傳輸之安全,利用數據加密(Encryption)技術,可確保數據在網絡上之傳輸過程當中不會被截取及竊聽。目前通常通用之規格爲40 bit之安全標準,美國則已推出128 bit之更高安全標準,但限制出境。只要3.0版本以上之I.E.或Netscape瀏覽器便可支持SSL。
 
  當前版本爲3.0。它已被普遍地用於Web瀏覽器與服務器之間的身份認證和加密數據傳輸。
 
  SSL協議位於TCP/IP協議與各類應用層協議之間,爲數據通信提供安全支持。SSL協議可分爲兩層: SSL記錄協議(SSL Record Protocol):它創建在可靠的傳輸協議(如TCP)之上,爲高層協議提供數據封裝、壓縮、加密等基本功能的支持。 SSL握手協議(SSL Handshake Protocol):它創建在SSL記錄協議之上,用於在實際的數據傳輸開始前,通信雙方進行身份認證、協商加密算法、交換加密密鑰等。
 
SSL協議提供的服務主要有哪些?
  1)認證用戶和服務器,確保數據發送到正確的客戶機和服務器;
  2)加密數據以防止數據中途被竊取;
  3)維護數據的完整性,確保數據在傳輸過程當中不被改變。
 
SSL協議的工做流程:
  服務器認證階段:1)客戶端向服務器發送一個開始信息「Hello」以便開始一個新的會話鏈接;2)服務器根據客戶的信息肯定是否須要生成新的主密鑰,如須要則服務器在響應客戶的「Hello」信息時將包含生成主密鑰所需的信息;3)客戶根據收到的服務器響應信息,產生一個主密鑰,並用服務器的公開密鑰加密後傳給服務器;4)服務器恢復該主密鑰,並返回給客戶一個用主密鑰認證的信息,以此讓客戶認證服務器。用戶認證階段:
 
  在此以前,服務器已經經過了客戶認證,這一階段主要完成對客戶的認證。經認證的服務器發送一個提問給客戶,客戶則返回(數字)簽名後的提問和其公開密鑰,從而向服務器提供認證。
 
  從SSL 協議所提供的服務及其工做流程能夠看出,SSL協議運行的基礎是商家對消費者信息保密的承諾,這就有利於商家而不利於消費者。在電子商務初級階段,因爲運做電子商務的企業大可能是信譽較高的大公司,所以這問題尚未充分暴露出來。但隨着電子商務的發展,各中小型公司也參與進來,這樣在電子支付過程當中的單一認證問題就愈來愈突出。雖然在SSL3.0中經過數字簽名和數字證書可實現瀏覽器和Web服務器雙方的身份驗證,可是SSL協議仍存在一些問題,好比,只能提供交易中客戶與服務器間的雙方認證,在涉及多方的電子交易中,SSL協議並不能協調各方間的安全傳輸和信任關係。在這種狀況下,Visa和 MasterCard兩大信用卡公組織制定了SET協議,爲網上信用卡支付提供了全球性的標準。
 
SSL協議的握手過程
  爲了便於更好的認識和理解 SSL 協議,這裏着重介紹 SSL 協議的握手協議。SSL 協議既用到了公鑰加密技術又用到了對稱加密技術,對稱加密技術雖然比公鑰加密技術的速度快,但是公鑰加密技術提供了更好的身份認證技術。SSL 的握手協議很是有效的讓客戶和服務器之間完成相互之間的身份認證,其主要過程以下:
 
  ①客戶端的瀏覽器向服務器傳送客戶端 SSL 協議的版本號,加密算法的種類,產生的隨機數,以及其餘服務器和客戶端之間通信所須要的各類信息。
 
  ②服務器向客戶端傳送 SSL 協議的版本號,加密算法的種類,隨機數以及其餘相關信息,同時服務器還將向客戶端傳送本身的證書。
 
  ③客戶利用服務器傳過來的信息驗證服務器的合法性,服務器的合法性包括:證書是否過時,發行服務器證書的 CA 是否可靠,發行者證書的公鑰可否正確解開服務器證書的「發行者的數字簽名」,服務器證書上的域名是否和服務器的實際域名相匹配。若是合法性驗證沒有經過,通信將斷開;若是合法性驗證經過,將繼續進行第四步。
 
  ④用戶端隨機產生一個用於後面通信的「對稱密碼」,而後用服務器的公鑰(服務器的公鑰從步驟②中的服務器的證書中得到)對其加密,而後將加密後的「預主密碼」傳給服務器。
 
  ⑤若是服務器要求客戶的身份認證(在握手過程當中爲可選),用戶能夠創建一個隨機數而後對其進行數據簽名,將這個含有簽名的隨機數和客戶本身的證書以及加密過的「預主密碼」一塊兒傳給服務器。
 
  ⑥若是服務器要求客戶的身份認證,服務器必須檢驗客戶證書和簽名隨機數的合法性,具體的合法性驗證過程包括:客戶的證書使用日期是否有效,爲客戶提供證書的CA 是否可靠,發行CA 的公鑰可否正確解開客戶證書的發行 CA 的數字簽名,檢查客戶的證書是否在證書廢止列表(CRL)中。檢驗若是沒有經過,通信馬上中斷;若是驗證經過,服務器將用本身的私鑰解開加密的「預主密碼」,而後執行一系列步驟來產生主通信密碼(客戶端也將經過一樣的方法產生相同的主通信密碼)。
 
  ⑦服務器和客戶端用相同的主密碼即「通話密碼」,一個對稱密鑰用於 SSL 協議的安全數據通信的加解密通信。同時在 SSL 通信過程當中還要完成數據通信的完整性,防止數據通信中的任何變化。
 
  ⑧客戶端向服務器端發出信息,指明後面的數據通信將使用的步驟⑦中的主密碼爲對稱密鑰,同時通知服務器客戶端的握手過程結束。
 
  ⑨服務器向客戶端發出信息,指明後面的數據通信將使用的步驟⑦中的主密碼爲對稱密鑰,同時通知客戶端服務器端的握手過程結束。
 
  ⑩SSL 的握手部分結束,SSL 安全通道的數據通信開始,客戶和服務器開始使用相同的對稱密鑰進行數據通信,同時進行通信完整性的檢驗。網絡

相關文章
相關標籤/搜索