3)維護數據的完整性,確保數據在傳輸過程當中不被改變。 web
SSL或者Secure Socket Layer,是一種容許web瀏覽器和web服務器經過一個安全的鏈接進行交流的技術。這意味着將被髮送的數據在一端被翻譯成密碼,傳送出去,而後在另外一端解開密碼,再進行處理。這是一個雙向的過程,也就是瀏覽器和服務器都須要在發送數據以前對它們進行加密。
SSL協定的另外一個重要方面是認證(Authentication)。這就是說,在你開始試圖經過一個安全鏈接與一個Web服務器交流的時候,這個服務器會要求你的瀏覽器出示一組證件,經過「鑑定」的方式來證實這就是你所聲明的網站。在某些狀況下,服務器還會要求你的web瀏覽器的認證書,證實你就是你所說的那我的。這就是所知的「客戶認證」,儘管實際狀況中,更多地用在商務-對-商務(B2B)交易,而不是對我的用戶。大多數有SSL功能的web服務器不要求客戶認證(Client Authentication)。 算法
爲了能實施SSL,一個web服務器對每一個接受安全鏈接的外部接口(IP地址)必需要有相應的認證書(Certificate)。關於這個設計的理論是一個服務器必須提供某種合理的保證以證實這個服務器的主人就是你所認爲的那我的,特別是在接收任何敏感信息以前要這樣作。關於Certificates的更普遍的解釋超過了這個文檔資料的範圍,就把一個認證書看成一個英特網地址的「數碼駕駛執照」。這個認證書要陳述與這個網站相關聯的公司,以及這個網站的全部者或系統管理員的一些基本聯繫信息。
這個"駕駛執照"由全部人以密碼方式簽字,其餘人很是難僞造。對於進行電子商務 (e-commerce)的網站,或其餘身份認證相當重要的任何商業交易,認證書要向你們所熟知的認證權威 (Certificate Authority (CA))如VeriSign或Thawte來購買。這樣的認證書可用電子技術證實屬實——實際上,認證權威單位會擔保它發出的認證書的真實性,若是你信任發出認證書的認證權威單位的話,你就能夠相信這個認證書是有效的。
從技術上說,SSL 證書(也稱爲數字證書)將身份與一對可用於加密和簽名數字信息的電子密鑰綁定。SSL 證書可以實現對某人自稱有權使用特定密鑰的聲明的驗證,有助於防止有人使用欺騙性密鑰來模擬其餘用戶。當與加密配合使用時,SSL 證書可提供完整的安全解決方案,能夠保證參與事務的一方或各方的身份。
SSL 證書是由受信任的第三方(稱爲證書頒發機構 (CA))發放的。CA 的做用有些像護照辦理處。CA 必須採起一些措施來肯定要向其發放 ID 的人或組織的身份。一旦 CA 創建某個組織的身份後,就能夠發出一個包含該組織的公鑰的證書,並用 CA 的私鑰對其簽名。
經過使用 SSL 證書,您就能在本身的站點上開展驗證身份的、加密的在線商務活動。訪問您站點的用戶將能夠向站點提交信用卡號或其餘我的信息,從而保證他們真心實意與您進行業務交易(並不是是騙子),而且他們發送給您的信息不會被目標接收者之外的任何人截取或解密。您的 SSL 證書將包含下列信息: 瀏覽器
3、證書格式
主要的證書類型有:
PEM
DER
PKCS#12 安全
PEM
能夠包括全部私鑰(RSA 和 DSA)、公鑰(RSA 和 DSA)和 (x509) 證書。它存儲用 Base64 編碼的 DER 格式數據,用 ascii 報頭包圍,所以適合系統之間的文本模式傳輸。
-----BEGIN CERTIFICATE-----
MIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx
EzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xFTAT
BgNVBAoTDEJFQSBXZWJMb2dpYzERMA8GA1UECxMIU2VjdXJpdHkxIzAhBgNVBAMT
GkRlbW8gQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9zdXBw
b3J0QGJlYS5jb20wHhcNMDAwNTMwMjEzODAxWhcNMDQwNTEzMjEzODAxWjCBjDEL
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
cmFuY2lzY28xFTATBgNVBAoTDEJFQSBXZWJMb2dpYzEZMBcGA1UEAxMQd2VibG9n
aWMuYmVhLmNvbTEeMBwGCSqGSIb3DQEJARYPc3VwcG9ydEBiZWEuY29tMFwwDQYJ
KoZIhvcNAQEBBQADSwAwSAJBALdsXEHqKHgs6zj0hU5sXMAUHzoT8kgWXmNkKHXH
79qbPh6EfdlriW9G/AbRF/pKrCQu7hhllAxREbqTuSlf2EMCAwEAATANBgkqhkiG
9w0BAQQFAANBACgmqflL5m5LNeJGpWx9aIoABCiuDcpw1fFyegsqGX7CBhffcruS
1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=
-----END CERTIFICATE----- 服務器
DER
辨別編碼規則 (DER) 可包含全部私鑰、公鑰和證書。它是大多數瀏覽器的缺省格式,並按 ASN1 DER 格式存儲。它是無報頭的 - PEM 是用文本報頭包圍的 DER。
PKCS#12
公鑰加密標準 #12 (PKCS#12) 可包含全部私鑰、公鑰和證書。其以二進制格式存儲,也稱爲 PFX 文件。 網絡
加密算法有倆大類,第一種是不基於KEY的,另外一種是不基於KEY的。
基於KEY的,舉個簡單的例子,我要加密"fordesign"這麼一串字符,就把每一個字符都變成它的後一個字符,那麼就是"gpseftjhm"了,這樣的東西人家固然看不明白,接收方用相反的方法就能夠獲得原文。固然這只是個例子,如今應該沒人用這麼搞笑的加密算法了吧。
不基於KEY,好象一直用到了計算機出現。我記得古中國軍事機密都是用這種方式加密的。打戰的時候好象軍隊那些電報員也要帶着密碼本,也應該是用這種方式加密的。這種算法的安全性以保持算法的保密爲前提。
這種加密算法的缺點太明顯了,就是一旦你的加密算法給人家知道,就確定掛。日本中途島慘敗好象就是密碼給老米破了。設計一種算法是很麻煩的,一旦給人破了就沒用了,這也忑浪費。
咱們如今使用的加密算法通常是基於key的,也就是說在加密過程當中須要一個key,用這個key來對明文進行加密。這樣的算法即便一次被破,下次改個key,還能夠繼續用。key是一個什麼東西呢?隨便你,能夠是一個隨機產生的數字,或者一個單詞,啥都行,只要你用的算法認爲你選來作key的那玩意合法就行。
這樣的算法最重要的是:其安全性取決於key,通常來講取決於key的長度。也就是說應該保證人家在知道這個算法而不知道key的狀況下,破解也至關困難。其實如今經常使用的基於KEY的加密算法在網絡上均可以找到。
基於key的加密算法又包括倆類:對稱加密和不對稱加密。
對稱加密指的是雙方使用徹底相同的key, 最多見的是DES. DES3, RC4等。對稱加密算法的原理很容易理解,通訊一方用KEK加密明文,另外一方收到以後用一樣的KEY來解密就能夠獲得明文。
不對稱加密指雙方用不一樣的KEY加密和解密明文,通訊雙方都要有本身的公共密鑰和私有密鑰。
舉個例子比較容易理解, 咱們們假設通訊雙方分別是A、B。
A 擁有 KEY_A一、KEY_A2, 其中KEY_A1是A的私有密鑰,KEY_A2是A的公共密鑰。
B 擁有 KEY_B一、KEY_B2, 其中KEY_B1是B的私有密鑰,KEY_B2是B的公共密鑰。
公共密鑰和私有密鑰的特色是,通過其中任何一把加密過的明文,只能用另一把纔可以解開。也就是說通過KEY_A1加密過的明文,只有KEY_A2纔可以解密,反之亦然。
通訊過程以下:
A-------->KEY_A2------------>B
A<--------KEY_B2<------------A
這個過程叫作公共密鑰交換,老外管這叫key exchange。
以後A和B就分別用對方的公共密鑰加密,用本身的私有密鑰解密。
通常公共密鑰是要發佈出去的,而後你經過本身的私有密鑰加密明文,人家用你的公共密鑰解密,若是能解開,那麼說明你是加密人,這就是SSL使用的驗證機制。
我若是要發給你,我就用你的公鑰加密,這讓只有你能用本身的私鑰解密。若是我用本身的私鑰加密,而後發佈出去,這就不屬於保密,而是屬於認證,證實這條信息是我發的,並且我不能賴賬,由於私鑰只有我本身知道。
經常使用的不對稱加密通常有RSA、 DSA、 DH等。咱們通常使用RSA。 網站
數字簽名也是不對稱加密算法的一個重要應用,理解它對於理解SSL很重要的,放在這裏一塊兒介紹一下。
簽名是什麼你們都很熟悉吧?證實該東西是你寫的,是你發佈的,你就用簽名搞定。看看那些重要文件都要頭頭簽名。數字簽名就是數字化的簽名了。記得公用密鑰和私有密鑰的特徵嗎?只有你一我的有你本身的私有密鑰。而你的公用密鑰是其餘人都知道的 了。那麼你在寫完一封郵件以後,用本身的私有密鑰加密本身的名字,接收人用你的公共密鑰解開一看,哦,是你發的。這就是你的數字簽名過程了。
上面的解釋是很簡化的了,其實數字簽名比這個複雜多了,但咱們沒有了解的必要,知道數字簽名是這麼一回事就能夠了。
還有一種咱們須要知道的加密算法,其實我不以爲那是加密算法 ,應該叫哈希算法,英文是message digest, 是用來把任何長度的一串明文以必定規則變成固定長度的一串字符串。它在SSL中的做用也很重要,之後會慢慢說起的。通常使用的是MD五、SHA、base64不是加密算法,但也是SSL常用的一種算法,它是編碼方式,用來把asc碼和二進制碼轉來轉去的。
具體的加密解密過程咱們不須要了解,由於SSL根本不關心。但瞭解加密算法的一些基本原理是必要的,不然很難理解SSL。 編碼