天天看點

https介紹

一:什麼是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的工作原理是什麼

數字證書實作。

非對稱加密,對稱加密以及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)。公開密鑰與私有密鑰是一對,如果用公開密鑰對資料進行加密,隻有用對應的私有密鑰才能解密;如果用私有密鑰對資料進行加密,那麼隻有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,是以這種算法叫作非對稱加密算法。

       非對稱加密算法實作機密資訊交換的基本過程是:甲方生成一對密鑰并将其中的一把作為公用密鑰向其它方公開;得到該公用密鑰的乙方使用該密鑰對機密資訊進行加密後再發送給甲方;甲方再用自己儲存的另一把專用密鑰對加密後的資訊進行解密。甲方隻能用其專用密鑰解密由其公用密鑰加密後的任何資訊。非對稱加密算法的保密性比較好,它消除了最終使用者交換密鑰的需要,但加密和解密花費時間長、速度慢,它不适合于對檔案加密而隻适用于對少量資料進行加密。 經典的非對稱加密算法如RSA算法等安全性都相當高. 非對稱加密的典型應用是數字簽名。采用雙鑰密碼系統的加密方法,在一個過程中使用兩個密鑰,一個用于加密,另一個用于解密,這種加密方法稱為非對稱加密,也稱為公鑰加密,因為其中一個密鑰是公開的(另一個則需要保密)。

DH (Diffie-Hellman)

       Diffie-Hellman算法(D-H算法),密鑰一緻協定。是由公開密鑰密碼體制的創始者Diffie和Hellman所提出的一種思想。簡單的說就是允許兩名使用者在公開媒體上交換資訊以生成"一緻"的、可以共享的密鑰。換句話說,就是由甲方産出一對密鑰(公鑰、私鑰),乙方依照甲方公鑰産生乙方密鑰對(公鑰、私鑰)。以此為基線,作為資料傳輸保密基礎,同時雙方使用同一種對稱加密算法建構本地密鑰(SecretKey)對資料加密。這樣,在互通了本地密鑰(SecretKey)算法後,甲乙雙方公開自己的公鑰,使用對方的公鑰和剛才産生的私鑰加密資料,同時可以使用對方的公鑰和自己的私鑰對資料解密。不單單是甲乙雙方兩方,可以擴充為多方共享資料通訊,這樣就完成了網絡互動資料的安全通訊!該算法源于中國的同餘定理——中國馀數定理。

RSA

EL Gamal

         EL Gamal算法是公鑰密碼體制中的一種 ,在密碼學中占有重要的地位。但該算法所采用的幂剩餘計算耗時太多的問題 ,一直是制約其廣泛應用的瓶頸問題。提出一種通過建表 ,以及對傳統二進制算法進行改進 ,即将指數進行 2 k進制化 ,減少原 BR算法疊代次數 ,提高加密解密速度的算法。

ECC 

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

目前Java 6公提供了DH和RSA兩種算法實作,通過Bouncy Castle可以實作Elmal算法支援,另ECC加密算法,目前沒有開源元件提支援

  1. 對稱加密算法

        對加密和解密使用相同密鑰的加密算法。由于其速度,對稱性加密通常在消息發送方需要加密大量資料時使用。對稱性加密也稱為密鑰加密。對稱式資料加密的方式的工作原理如圖。所謂對稱,就是采用這種加密方法的雙方使用方式用同樣的密鑰進行加密和解密。密鑰實際上是一種算法,通信發送方使用這種算法加密資料,接收方再以同樣的算法解密資料。是以對稱式加密本身不是安全的。常用的對稱加密有: 

DES、IDEA、RC2、RC4、SKIPJACK算法等 。

采用單鑰密碼系統的加密方法,同一個密鑰可以同時用作資訊的加密和解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。

  1. HASH算法

MD5,SHA1,SHA256

消息摘要算法的特點:

① 無論輸入的消息有多長,計算出來的消息摘要的長度總是固定的。

② 消息摘要看起來是“随機的”。這些比特看上去是胡亂的雜湊在一起的。

③ 一般地,隻要輸入的消息不同,對其進行摘要以後産生的摘要消息也必不相同;但相同的輸入必會産生相同的輸出。

④ 消息摘要函數是無陷門的單向函數,即隻能進行正向的資訊摘要,而無法從摘要中恢複出任何的消息,甚至根本就找不到任何與原資訊相關的資訊。

⑤ 好的摘要算法,無法找到兩條消息,是它們的摘要相同。

消息摘要(Message Digest)又稱為數字摘要(Digital Digest)。它是一個唯一對應一個消息或文本的固定長度的值,它由一個單向Hash加密函數對消息進行作用而産生。如果消息在途中改變了,則接收者通過對收到消息的新産生的摘要與原摘要比較,就可知道消息是否被改變了。是以消息摘要保證了消息的完整性。消息摘要采用單向Hash 函數将需加密 的明文"摘要"成一串128bit的密文,這一串密文亦稱為數字指紋(Finger Print),它有固定的長度,且不同的明文摘要成密文,其結果總是不同的,而同樣的明文其摘要必定一緻 。這樣這串摘要便可成為驗證明文是否是"真身"的"指紋"了。

       HASH函數的抗沖突性使得如果一段明文稍有變化,哪怕隻更改該段落的一個字母,通過雜湊演算法作用後都将産生不同的值。而HASH算法的單向性使得要找到到哈希值相同的兩個不 同的輸入消息,在計算上是不可能的。是以資料的哈希值,即消息摘要,可以檢驗資料的完整性。哈希函數的這種對不同的輸入能夠生成不同的值的特性使得無法找到兩個具有相同哈希值的輸入。是以,如果兩個文檔經哈希轉換後成為相同的值,就可以肯定它們是同一文檔。 是以,當希望有效地比較兩個資料塊時,就可以比較它們的哈希值。例如,可以通過比較郵件發送前和發送後的哈希值來驗證該郵件在傳遞時是否修改

      消息摘要算法的主要特征是加密過程不需要密鑰,并且經過加密的資料無法被解密,隻有輸入相同的明文資料經過相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在 密鑰的管理與分發問題,适合于分布式網絡相同上使用。由于其加密計算的工作量相當可觀,是以以前的這種算法通常隻用于資料量有限的情況下的加密,例如計算機的密碼就是 用不可逆加密算法加密的。

   三 https握手的過程較長的描述

1.浏覽器将自己支援的一套加密規則發送給網站,如RSA加密算法,DES對稱加密算法,SHA1摘要算法

2.網站從中選出一組加密算法與HASH算法,并将自己的身份資訊以證書的形式發回給浏覽器。證書裡面包含了網站位址,加密公鑰,以及證書的頒發機構等資訊(證書中的私鑰隻能用于伺服器端進行解密,在握手的整個過程中,都用到了證書中的公鑰和浏覽器發送給伺服器的随機密碼以及對稱加密算法)

3.獲得網站證書之後浏覽器要做以下工作:

    a) 驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站位址是否與正在通路的位址一緻等),如果證書受信任,則浏覽器欄裡面會顯示一個小鎖頭,否則會給出證書不受信的提示。

    b) 如果證書受信任,或者是使用者接受了不受信的證書,浏覽器會生成一串随機數的密碼,并用證書中提供的公鑰加密。

    c) 使用約定好的HASH算法計算握手消息(如SHA1),并使用生成的随機數對消息進行加密,最後将之前生成的被公鑰加密的随機數密碼,HASH摘要值一起發送給伺服器