HTTPS那些事 用java實現HTTPS工做原理

今天被問到關於https原理的問題,結果因爲知識掌握不牢靠,停留於表面,不少細節都沒法回答清楚,因而決定把https的原理弄個明白,廢話很少說,咱們先看看https的定義git

 (因爲好久未寫博客,排版有些凌亂,請諒解)算法

一:什麼是https協議

     在說HTTPS以前先說說什麼是HTTP,HTTP就是咱們平時瀏覽網頁時候使用的一種協議。HTTP協議傳輸的數據都是未加密的,也就是明文的,所以使 用HTTP協議傳輸隱私信息很是不安全。爲了保證這些隱私數據能加密傳輸,因而網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS。SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定義在RFC 6101中,以後IETF對SSL 3.0進行了升級,因而出現了TLS(Transport Layer Security) 1.0,定義在RFC 2246。實際上咱們如今的HTTPS都是用的TLS協議,可是因爲SSL出現的時間比較早,而且依舊被如今瀏覽器所支持,所以SSL依然是HTTPS的 代名詞,但不管是TLS仍是SSL都是上個世紀的事情,SSL最後一個版本是3.0,從此TLS將會繼承SSL優良血統繼續爲咱們進行加密服務。目前 TLS的版本是1.2,定義在RFC 5246中,暫時尚未被普遍的使用。對歷史感興趣的朋友能夠參考http://en.wikipedia.org/wiki/Transport_Layer_Security,這裏有對TLS/SSL詳盡的敘述。編程

二:https的工做原理是什麼

     HTTPS在傳輸數據以前須要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握 手過程當中將確立雙方加密傳輸數據的密碼信息,一般狀況下會配合數字證書實現。瀏覽器

TLS/SSL協議不只僅是一套加密傳輸的協議,更是一件通過藝術家精心設計的藝術品,TLS/SSL中使用 非對稱加密對稱加密以及HASH算法安全

這裏咱們先看看這上面提到的幾種技術(若是你對這些技術已經很是瞭解,那麼請跳過該段落,直接到段落三)網絡

  1. 數字證書分佈式

        數字證書是一種權威性的電子文檔,由權威公正的第三方機構,即CA中心簽發的證書。它以數字證書爲核心的加密技術能夠對網絡上傳輸的信息進行加密和解密、數字簽名和簽名驗證,確保網上傳遞信息的機密性、完整性。 使用了數字證書,即便您發送的信息在網上被他人截獲,甚至您丟失了我的的帳戶、密碼等信息,仍能夠保證您的帳戶、資金安全。 

     它能提供在Internet上進行身份驗證的一種權威性電子文檔,人們能夠在互聯網交往中用它來證實本身的身份和識別對方的身份。固然在數字證書認證的過程當中證書認證中心(CA)做爲權威的、公正的、可信賴的第三方,其做用是相當重要的.如何判斷數字認證中心公正第三方的地位是權威可信的。VeriSign、GeoTrust、Thawte 是國際權威數字證書頒發認證機構的「三巨頭」,其中,應用最廣的爲VerSign簽發的電子商務數字證書。

CER(Canonical Encoding Rules,規範編碼格式) 是數字證書的一種編碼格式,它是BER(Basic Encoding Rules 基本編碼格式) 的一個變種,比BER 規定得更嚴格。後綴的證書文件有兩種編碼:

DER(Distinguished Encoding Rule 卓越編碼格式) 一樣是BER的一個變種,DER使用定長模式。

PKCS(Public-Key Cryptography Standards,公鑰加密標準) 由RSA實驗室和其餘安全系統開發商爲公鑰密碼的發展而制定的一系列標準。

pfx是指以pkcs#12格式存儲的證書和相應私鑰。 

在Security編程中,有幾種典型的密碼交換信息文件格式: 
DER-encoded certificate: .cer, .crt 
PEM-encoded message: .pem 
PKCS#12 Personal Information Exchange: .pfx, .p12 
PKCS#10 Certification Request: .p10 .csr
PKCS#7 cert request response: .p7r 
PKCS#7 binary message: .p7b .p7c .spc

cer/.crt 是用於存放證書,它是2進制形式存放

pem 跟crt/cer的區別是它以Ascii來表示

pfx/p12 用於存放我的證書/私鑰,他一般包含保護密碼,2進制方式 

p10 .csr 是證書請求 

p7r是CA對證書請求的回覆,只用於導入 

p7b .p7c .spc 以樹狀展現證書鏈(certificate chain),同時也支持單個證書,不含私鑰
函數

 

 

  1. 非對稱加密算法網站

          1976年,美國學者Dime和Henman爲解決信息公開傳送和密鑰管理問題,提出一種新的密鑰交換協議,容許在不安全的媒體上的通信雙方交換信息,安全地達成一致的密鑰,這就是"公開密鑰系統"。相對於"對稱加密算法"這種方法也叫作"非對稱加密算法"。與對稱加密算法不一樣,非對稱加密算法須要兩個密鑰:公開密鑰(publickey)和私有密(privatekey)。公開密鑰與私有密鑰是一對,若是用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;若是用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。由於加密和解密使用的是兩個不一樣的密鑰,因此這種算法叫做非對稱加密算法。ui

       非對稱加密算法實現機密信息交換的基本過程是:甲方生成一對密鑰並將其中的一把做爲公用密鑰向其它方公開;獲得該公用密鑰的乙方使用該密鑰對機密信息進行加密後再發送給甲方;甲方再用本身保存的另外一把專用密鑰對加密後的信息進行解密。甲方只能用其專用密鑰解密由其公用密鑰加密後的任何信息。非對稱加密算法的保密性比較好,它消除了最終用戶交換密鑰的須要,但加密和解密花費時間長、速度慢,它不適合於對文件加密而只適用於對少許數據進行加密。 經典的非對稱加密算法如RSA算法等安全性都至關高. 非對稱加密的典型應用是數字簽名。採用雙鑰密碼系統的加密方法,在一個過程當中使用兩個密鑰,一個用於加密,另外一個用於解密,這種加密方法稱爲非對稱加密,也稱爲公鑰加密,由於其中一個密鑰是公開的(另外一個則須要保密)。

DH (Diffie-Hellman)
       Diffie-Hellman算法(D-H算法),密鑰一致協議。是由公開密鑰密碼體制的奠定人Diffie和Hellman所提出的一種思想。簡單的說就是容許兩名用戶在公開媒體上交換信息以生成"一致"的、能夠共享的密鑰。換句話說,就是由甲方產出一對密鑰(公鑰、私鑰),乙方依照甲方公鑰產生乙方密鑰對(公鑰、私鑰)。以此爲基線,做爲數據傳輸保密基礎,同時雙方使用同一種對稱加密算法構建本地密鑰(SecretKey)對數據加密。這樣,在互通了本地密鑰(SecretKey)算法後,甲乙雙方公開本身的公鑰,使用對方的公鑰和剛纔產生的私鑰加密數據,同時可使用對方的公鑰和本身的私鑰對數據解密。不僅僅是甲乙雙方兩方,能夠擴展爲多方共享數據通信,這樣就完成了網絡交互數據的安全通信!該算法源於中國的同餘定理——中國餘數定理。

RSA
       RSA公鑰加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美國麻省理工學院)開發的。RSA取名來自開發他們三者的名字。RSA是目前最有影響力的公鑰加密算法,它可以抵抗到目前爲止已知的全部密碼攻擊,已被ISO推薦爲公鑰數據加密標準。RSA算法基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,但那時想要對其乘積進行因式分解卻極其困難,所以能夠將乘積公開做爲加密密鑰。

EL Gamal
         EL Gamal算法是公鑰密碼體制中的一種 ,在密碼學中佔有重要的地位。但該算法所採用的冪剩餘計算耗時太多的問題 ,一直是制約其普遍應用的瓶頸問題。提出一種經過建表 ,以及對傳統二進制算法進行改進 ,即將指數進行 2 k進制化 ,減小原 BR算法迭代次數 ,提升加密解密速度的算法。

ECC 
ECC (Elliptical Curve Cryptography,橢圓曲線加密)算法不橢圓曲線理論爲基礎,在建立密鑰時能夠更快,更小,而且更有效,它是用大質數的積來產生。

目前Java 6公提供了DH和RSA兩種算法實現,經過Bouncy Castle能夠實現Elmal算法支持,另ECC加密算法,目前沒有開源組件提支持

  1. 對稱加密算法

        對加密和解密使用相同密鑰的加密算法。因爲其速度,對稱性加密一般在消息發送方須要加密大量數據時使用。對稱性加密也稱爲密鑰加密。對稱式數據加密的方式的工做原理如圖。所謂對稱,就是採用這種加密方法的雙方使用方式用一樣的密鑰進行加密和解密。密鑰其實是一種算法,通訊發送方使用這種算法加密數據,接收方再以一樣的算法解密數據。所以對稱式加密自己不是安全的。經常使用的對稱加密有: 

DES、IDEA、RC二、RC四、SKIPJACK算法等 。

採用單鑰密碼系統的加密方法,同一個密鑰能夠同時用做信息的加密和解密,這種加密方法稱爲對稱加密,也稱爲單密鑰加密。

 

  1. HASH算法

經常使用的摘要算法包括MD5,SHA1,SHA256

消息摘要算法的特色:

① 不管輸入的消息有多長,計算出來的消息摘要的長度老是固定的。
② 消息摘要看起來是「隨機的」。這些比特看上去是胡亂的雜湊在一塊兒的。
③ 通常地,只要輸入的消息不一樣,對其進行摘要之後產生的摘要消息也必不相同;但相同的輸入必會產生相同的輸出。
④ 消息摘要函數是無陷門的單向函數,即只能進行正向的信息摘要,而沒法從摘要中恢復出任何的消息,甚至根本就找不到任何與原信息相關的信息。
⑤ 好的摘要算法,沒法找到兩條消息,是它們的摘要相同。

 

消息摘要(Message Digest)又稱爲數字摘要(Digital Digest)。它是一個惟一對應一個消息或文本的固定長度的值,它由一個單向Hash加密函數對消息進行做用而產生。若是消息在途中改變了,則接收者經過對收到消息的新產生的摘要與原摘要比較,就可知道消息是否被改變了。所以消息摘要保證了消息的完整性。消息摘要採用單向Hash 函數將需加密 的明文"摘要"成一串128bit的密文,這一串密文亦稱爲數字指紋(Finger Print),它有固定的長度,且不一樣的明文摘要成密文,其結果老是不一樣的,而一樣的明文其摘要一定一致 。這樣這串摘要即可成爲驗證實文是不是"真身"的"指紋"了。


       HASH函數的抗衝突性使得若是一段明文稍有變化,哪怕只更改該段落的一個字母,經過哈希算法做用後都將產生不一樣的值。而HASH算法的單向性使得要找到到哈希值相同的兩個不 同的輸入消息,在計算上是不可能的。因此數據的哈希值,即消息摘要,能夠檢驗數據的完整性。哈希函數的這種對不一樣的輸入可以生成不一樣的值的特性使得沒法找到兩個具備相同哈希值的輸入。所以,若是兩個文檔經哈希轉換後成爲相同的值,就能夠確定它們是同一文檔。 因此,當但願有效地比較兩個數據塊時,就能夠比較它們的哈希值。例如,能夠經過比較郵件發送前和發送後的哈希值來驗證該郵件在傳遞時是否修改

      消息摘要算法的主要特徵是加密過程不須要密鑰,而且通過加密的數據沒法被解密,只有輸入相同的明文數據通過相同的消息摘要算法才能獲得相同的密文。消息摘要算法不存在 密鑰的管理與分發問題,適合於分佈式網絡相同上使用。因爲其加密計算的工做量至關可觀,因此之前的這種算法一般只用於數據量有限的狀況下的加密,例如計算機的口令就是 用不可逆加密算法加密的。

相關文章
相關標籤/搜索