计算机网络:浅谈HTTPS和加密
1. 前言
最近研究HTTPS(超文本傳輸安全協(xié)議),是在HTTP協(xié)議的基礎(chǔ)上增加了一層SSL協(xié)議。SSL協(xié)議用來(lái)在客戶(hù)端和服務(wù)器之間創(chuàng)建一個(gè)安全可靠的通信環(huán)境,那么我們要深入了解HTTP協(xié)議是如何做到安全可靠的通信,我們就要了解一下簡(jiǎn)單的密碼學(xué)原理。下面我們就開(kāi)始從密碼學(xué)講起,然后深入到HTTPS相比HTTP協(xié)議之上如何去建立一個(gè)可靠安全的通信。
2. 加密方式
密碼學(xué)是一門(mén)涉及數(shù)學(xué)、電子信息、計(jì)算機(jī)等多學(xué)科的一門(mén)重要學(xué)科,是現(xiàn)代網(wǎng)絡(luò)安全的基石。其中加密方式可以分為兩類(lèi),一類(lèi)是可逆的加密方式,一類(lèi)是不可逆的加密方式
2.1 不可逆的加密方式
信息摘要(Message Digest)和安全散列(Secure Hash)算法屬于此類(lèi),常見(jiàn)的算法包括 MD5、SHA1、PBKDF2、bcrypt 等。此類(lèi)算法可將任意大小的原始數(shù)據(jù)變換成規(guī)定長(zhǎng)度的輸出,即獲取內(nèi)容的數(shù)字指紋,常用于校驗(yàn)原始內(nèi)容是否被篡改。
2.2 可逆的加密方式
可逆的加密方式又可以分為以下三種:
- 基于算法的加密算法,也被稱(chēng)為古典加密算法,如 HTTP 認(rèn)證中的 base64,比特幣生成地址用的 base58(公開(kāi)的算法也可稱(chēng)作編碼方式)。這類(lèi)算法主要對(duì)原始內(nèi)容進(jìn)行置換和替換得到密文。
- 對(duì)稱(chēng)加密算法,加密和解密使用同一個(gè)密鑰。對(duì)稱(chēng)加密算法的出現(xiàn)標(biāo)志密碼學(xué)進(jìn)入現(xiàn)代密碼學(xué)階段,密文的安全性從依賴(lài)于算法轉(zhuǎn)向依賴(lài)于密鑰。常見(jiàn)的對(duì)稱(chēng)加密算法有 DES、3DES、AES;
- 非對(duì)稱(chēng)加密算法,加密和解密使用不同的密鑰。非對(duì)稱(chēng)加密算法開(kāi)創(chuàng)了密碼學(xué)的里程碑,解決了對(duì)稱(chēng)加密過(guò)程中密鑰分發(fā)的安全問(wèn)題,被認(rèn)為現(xiàn)代密碼學(xué)最偉大的發(fā)明。常見(jiàn)的算法有 RSA、DH(Diffie-Hellman)、橢圓曲線算法(Elliptic curve cryptography,ECC)。
對(duì)稱(chēng)加密算法
這里我們重點(diǎn)來(lái)介紹對(duì)稱(chēng)加密和非對(duì)稱(chēng)加密。對(duì)稱(chēng)加密就是指加密和解密都是使用的同一個(gè)密鑰。
也就是說(shuō)在加密的同時(shí),也會(huì)把密鑰發(fā)送給對(duì)方。在發(fā)送密鑰過(guò)程中可能會(huì)造成密鑰被竊取,那么如何解決這一問(wèn)題呢?
非對(duì)稱(chēng)加密算法
公開(kāi)密鑰使用一對(duì)非對(duì)稱(chēng)密鑰。一把叫私有密鑰,另一把叫公開(kāi)密鑰私有密鑰不讓任何人知道,公有密鑰隨意發(fā)送。也就是說(shuō),發(fā)送密文方使用對(duì)方的公開(kāi)密鑰進(jìn)行加密,對(duì)方接受到信息后,使用私有密鑰進(jìn)行解密。非對(duì)稱(chēng)加密算法還可以用來(lái)做數(shù)字簽名。
對(duì)于公鑰和私鑰的理解,我們可以查看如下博客 公鑰、密鑰、數(shù)字簽名
公鑰就是指的是密鑰是公開(kāi)的,每個(gè)人都可以持有一把公鑰。私鑰就是指的是密鑰是私有的,只能被私鑰擁有者使用。
- 當(dāng)網(wǎng)絡(luò)中的其他人要發(fā)送消息給私鑰擁有者的時(shí)候,其他人可以用公鑰對(duì)消息進(jìn)行加密,私鑰擁有者獲取到加密后的消息,然后使用私鑰進(jìn)行解密。
- 當(dāng)私鑰擁有者要發(fā)送消息給網(wǎng)絡(luò)中其他人的時(shí)候,私鑰擁有者可以通過(guò)對(duì)消息進(jìn)行Hash函數(shù),生成相應(yīng)的摘要。然后通過(guò)使用私鑰對(duì)要發(fā)送的摘要進(jìn)行加密,生成數(shù)字簽名,然后將數(shù)字簽名和加密后的消息發(fā)送給網(wǎng)絡(luò)其他人。網(wǎng)絡(luò)其他人收到加密后的消息,通過(guò)對(duì)數(shù)字簽名使用公鑰進(jìn)行解密生成摘要,然后對(duì)消息通過(guò)Hash函數(shù),生成相應(yīng)的摘要。通過(guò)對(duì)比解密后的摘要和Hash函數(shù)生成的摘要,判斷消息是否在網(wǎng)絡(luò)中被篡改。但是這種通信還會(huì)存在一定的問(wèn)題,萬(wàn)一網(wǎng)絡(luò)其他人的公鑰被攻擊者篡改成自己的公鑰,那么這種網(wǎng)絡(luò)通信就不安全的。下面講解如何通過(guò)CA認(rèn)證中心對(duì)公鑰進(jìn)行認(rèn)證,生成數(shù)字證書(shū)。
- 私鑰擁有者通過(guò)去找“證書(shū)中心”,為公鑰進(jìn)行認(rèn)證。證書(shū)中心用自己的私鑰,對(duì)私鑰擁有者的公鑰和一些相關(guān)信息做認(rèn)證一起加密,生成“數(shù)字證書(shū)”。然后私鑰擁有者將數(shù)字證書(shū)以及數(shù)字簽名和消息發(fā)送給網(wǎng)絡(luò)其他人,網(wǎng)絡(luò)其他人通過(guò)使用認(rèn)證中心提供的公鑰對(duì)“數(shù)字證書(shū)”進(jìn)行解密,得到安全可靠的公鑰,然后使用公鑰對(duì)“數(shù)字簽名”進(jìn)行解密,得到相應(yīng)的摘要。通過(guò)對(duì)比解密后的摘要和Hash函數(shù)生成的摘要,判斷消息是否在網(wǎng)絡(luò)中被篡改。
3. HTTPS(超文本傳輸控制協(xié)議)
解決的問(wèn)題:在HTTP協(xié)議中有可能存在信息竊聽(tīng)或身份偽裝等問(wèn)題,而使用HTTPS通信機(jī)制可以有效地防止這些問(wèn)題。
HTTP協(xié)議存在的問(wèn)題:
3.1 HTTPS簡(jiǎn)介
什么是HTTPS:與SSL(安全套接層)組合使用的HTTP被稱(chēng)為HTTPS(HTTP Secure,超文本傳輸安全協(xié)議)
加密處理防止竊聽(tīng):通信加密。HTTP協(xié)議與SSL組合使用,加密HTTP的通信內(nèi)容。用SSL建立安全通信線路之后,就可以在這條線路通信了。
HTTP + 加密 + 認(rèn)證 + 完整性保護(hù) = HTTPS在使用http協(xié)議時(shí),HTTP直接與TCP通信,當(dāng)使用SSL時(shí),則需要先與SSL通信,然后再由SSL和TCP通信。
3.2 HTTPS采用混合加密機(jī)制
HTTPS采用共享密鑰加密和公開(kāi)密鑰加密兩者混合加密,兩者都有各自的優(yōu)點(diǎn)。共享密鑰加密處理速度快,但密鑰無(wú)法安全發(fā)送給對(duì)方;公開(kāi)密鑰加密處理速度慢,但密鑰能夠安全交換。
但如果我們將兩種加密方式一起使用,則兩種加密方式就能互補(bǔ)。也就是說(shuō),利用公開(kāi)密鑰加密方式安全地交換在共享密鑰加密中要使用的密鑰,在確保密鑰安全前提下,使用共享密鑰加密方式進(jìn)行通信
下面我們來(lái)詳細(xì)討論一下HTTPS如何通過(guò)SSL協(xié)議獲得安全可靠的共享密鑰:
總結(jié)
以上是生活随笔為你收集整理的计算机网络:浅谈HTTPS和加密的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: NIO详解(十):FileChannel
- 下一篇: NIO详解(三):IO多路复用模型之se