自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

數(shù)字證書、簽名到底是什么?這篇文章講得太好了

網(wǎng)絡(luò) 通信技術(shù)
大家好,我是明哥。前段時間整理了關(guān)于數(shù)字證書和數(shù)字簽名的一些內(nèi)容,今天整理一下發(fā)出來。

大家好,我是明哥。

前段時間整理了關(guān)于數(shù)字證書和數(shù)字簽名的一些內(nèi)容,今天整理一下發(fā)出來。

我們都知道 HTTP 協(xié)議都是明文傳輸內(nèi)容,為了保證數(shù)據(jù)傳輸?shù)陌踩琀TTPS 協(xié)議就應(yīng)運而生了,但它其實并不是一個全新的協(xié)議,而是HTTP 協(xié)議基本之上 再加上SSL/TLS 協(xié)議。

因此當(dāng)你訪問一個支持 https 的網(wǎng)站時,是需要先進行 SSL/TLS 握手建立連接的。

[[346870]]

SSL/TLS 握手的目的是為了 安全 地協(xié)商出一份對稱加密的密鑰,有了這個密鑰之后,后續(xù)的數(shù)據(jù)全部使用這個密鑰進行加密。

這個過程其實挺有趣的,涉及到的知識點,專業(yè)名詞也很多,比如對稱加密,非對稱加密,信息摘要,數(shù)字簽名,數(shù)字證書,公鑰和私鑰。本篇文章,會詳細地介紹這些極易混淆的專業(yè)名詞。

在講解之前,我先給你提出幾個摸底問題,如果你已經(jīng)還不能夠熟練回答,那么本篇文章會給你答案:

  • 對稱加密和非對稱加密,各有什么優(yōu)缺點?
  • 對稱加密和非對稱加密,是排他關(guān)系嗎?是否可以搭配使用?
  • 摘要和加密有什么區(qū)別?有了摘要算法為什么還要有加密算法?
  • 如何在通信時同時做到保密性、高效性?
  • 如何申請數(shù)字證書?證書分為哪幾種?SSL 證書如何部署?
  • 完整說下證書申請、證書簽發(fā)、證書下發(fā)客戶端、客戶端驗證證書、數(shù)據(jù)加密傳輸?shù)恼麄€流程?

1. 對稱加密與非對稱加密

(1) 對稱加密

對稱加密是通信雙方共同擁有一把密鑰。

這把密鑰可以把明文加密(encryption)成密文,也可以把密文解密(decryption)成明文。

常見的對稱加密算法有AES、DES、RC4,其中最常用的是AES。

對稱加密的優(yōu)點是:速度快。

同時也有一個缺點,就是不那么安全,一旦你的密鑰被別人竊取了,所有的數(shù)據(jù)就會在網(wǎng)絡(luò)的世界里裸奔。

(2) 非對稱加密

與對稱加密相對的是 非對稱加密。

通信雙方持有不同的密鑰。

服務(wù)端的密鑰,稱之為 私鑰(private key),客戶端的密鑰,稱之為 公鑰 (public key)。

他們二者的區(qū)別是:

  • 私鑰應(yīng)僅在服務(wù)端保存,絕不可泄露。而公鑰可以存在于任何的客戶端,即使黑客拿到了也沒有關(guān)系。
  • 公鑰加密的密文只有相對應(yīng)的私鑰才能解密
  • 私鑰加密的內(nèi)容,所有與之相對應(yīng)的公鑰都能解密。
  • 私鑰通常用來生成簽名,公鑰用來驗證簽名。
  • 公鑰和私鑰是相對的,兩者本身并沒有規(guī)定哪一個必須是公鑰或私鑰。這意味著,公鑰只要不對外公開,那就可以做為私鑰,私鑰公開后也可以做為公鑰。

典型的非對稱加密算法有 RSA 。

非對稱加密的優(yōu)點,就是安全系數(shù)特別高。缺點就是速度會慢一些。

(3) 對稱與非對稱加密結(jié)合

當(dāng)客戶端收到的公鑰是準確的時候,通信就是安全的。

因為用正確公鑰加密過的密文,只有服務(wù)端的私鑰能解。

那么如何保證,客戶端收到正確的公鑰呢?

答案是:通過非對稱加密來協(xié)商對稱加密的密鑰,服務(wù)端一旦把正確的公鑰安全地送達到客戶端后,后續(xù)的通信,為了保證高效通信,再采用對稱加密來加密數(shù)據(jù)。

具體的過程,后面會更加詳細的闡述這一過程。

2. 摘要、簽名、證書是啥?

(1) 信息摘要

一段信息,經(jīng)過摘要算法得到一串哈希值,就是摘要(dijest)。

常見的摘要算法有MD5、SHA1、SHA256、SHA512等。

關(guān)于摘要,有幾點需要你明白的:

  • 摘要算法,是把任意長度的信息,映射成一個定長的字符串。
  • 摘要算法,兩個不同的信息,是有可能算出同一個摘要值的。
  • 摘要算法與加密算法不同,不存在解密的過程。
  • 摘要算法不用于數(shù)據(jù)的保密,而是用于數(shù)據(jù)的完整性校驗。

(2) 數(shù)字簽名

摘要經(jīng)過私鑰的加密后,便有了一個新的名字 -- 數(shù)字簽名。

  • 簽名 是在發(fā)送方,這是一個加密的過程。
  • 驗簽 是在接收方,這是一個解密的過程。

那搞懂?dāng)?shù)字簽名的意義是什么?只要回答下面兩個問題即可。

第一個問題,有了信息摘要,為何還要有數(shù)字簽名?

答:信息摘要,雖然也不可逆,但卻容易卻被偽造。所以信息摘要只用于校驗完整性,而要保證信息摘要的正確性,就要依靠數(shù)字簽名啦。

數(shù)字簽名的簽名和驗簽是非對稱加密,其他人除非拿到私鑰,不然沒法偽造。

第二個問題,為什么不對內(nèi)容直接加密,而是對摘要進行加密。

答:由上面我們知道了非對稱加密的速度非常慢,如果傳輸?shù)臄?shù)據(jù)量非常大,那這個加密再解密的時間要遠比網(wǎng)絡(luò)傳輸?shù)臅r間來得長,這樣反而會得不償失。

如果我們對傳輸?shù)膬?nèi)容只有完整性要求,而安全性沒有要求(意思是傳輸?shù)膬?nèi)容被人知道了也沒關(guān)系)。那就可以對摘要進行加密,到客戶端這里解密后得到摘要明文,再用這個摘要明文與傳輸?shù)臄?shù)據(jù)二次計算的摘要進行比較,若一致,則說明傳輸?shù)膬?nèi)容是完整的,沒有被篡改。

(3) 數(shù)字證書

在數(shù)字簽名那里,不知道你有沒有發(fā)現(xiàn)一個問題?

數(shù)字簽名是非對稱加密,服務(wù)端有一個私鑰,客戶端一個公鑰,只有這兩個對上了驗簽。

那假如說你(客戶端)拿到的公鑰并不是服務(wù)端給的呢,而是黑客塞給你的呢?而你卻把這個假公鑰當(dāng)成真的,那么當(dāng)你使用這個假公鑰加密一些敏感信息時,黑客就可以截取你的這段信息,由于這信息是用黑客自己的公鑰加密的,這樣一來,黑客拿自己的私鑰就能解密得到你的敏感信息。

這就是問題所在。

要解決這個問題,其實只要保證『公鑰』是可信的。只有服務(wù)端發(fā)給你的公鑰你才能拿,而壞人給你的公鑰,你要懂得識別并丟棄它。

數(shù)字證書就應(yīng)運而生了。

要理解數(shù)字證書,同樣只要搞懂兩個問題即可。

  • 數(shù)字證書是什么東西?其實它就是一個 .crt 文件
  • 數(shù)字證書是誰頒發(fā)的?由權(quán)威證書認證機構(gòu)頒發(fā),一般我們簡稱為 CA 機構(gòu)
  • 數(shù)字證書如何申請的?或者說如何頒發(fā)的?

為了讓你理解這一過程,我畫了下面這張圖:

  • 在自己的服務(wù)器上生成一對公鑰和私鑰。然后將域名、申請者、公鑰(注意不是私鑰,私鑰是無論如何也不能泄露的)等其他信息整合在一起,生成.csr 文件。
  • 將這個 .csr 文件發(fā)給 CA 機構(gòu),CA 機構(gòu)收到申請后,會通過各種手段驗證申請者的組織信息和個人信息,如無異常(組織存在,企業(yè)合法,確實是域名的擁有者),CA 就會使用散列算法對.csr里的明文信息先做一個HASH,得到一個信息摘要,再用 CA 自己的私鑰對這個信息摘要進行加密,生成一串密文,密文即是所說的 簽名。簽名 + .csr 明文信息,即是 證書。CA 把這個證書返回給申請人。

3. 數(shù)字證書(Certificate)

在HTTPS的傳輸過程中,有一個非常關(guān)鍵的角色--數(shù)字證書,那什么是數(shù)字證書?又有什么作用呢?

所謂數(shù)字證書,是一種用于電腦的身份識別機制。由數(shù)字證書頒發(fā)機構(gòu)(CA)對使用私鑰創(chuàng)建的簽名請求文件做的簽名(蓋章),表示CA結(jié)構(gòu)對證書持有者的認可。

(1) 數(shù)字證書擁有以下幾個優(yōu)點

  • 使用數(shù)字證書能夠提高用戶的可信度;
  • 數(shù)字證書中的公鑰,能夠與服務(wù)端的私鑰配對使用,實現(xiàn)數(shù)據(jù)傳輸過程中的加密和解密;
  • 在認證使用者身份期間,使用者的敏感個人數(shù)據(jù)并不會被傳輸至證書持有者的網(wǎng)絡(luò)系統(tǒng)上;

(2) 證書類型

x509的證書編碼格式有兩種:

PEM(Privacy-enhanced Electronic Mail)是明文格式的,以 -----BEGIN CERTIFICATE-----開頭,以-----END CERTIFICATE-----結(jié)尾。中間是經(jīng)過base64編碼的內(nèi)容,apache需要的證書就是這類編碼的證書.查看這類證書的信息的命令為: openssl x509 -noout -text -in server.pem。其實PEM就是把DER的內(nèi)容進行了一次base64編碼

DER是二進制格式的證書,查看這類證書的信息的命令為: openssl x509 -noout -text -inform der -in server.der

(3) 擴展名

  • .crt證書文件,可以是DER(二進制)編碼的,也可以是PEM(ASCII (Base64))編碼的),在類unix系統(tǒng)中比較常見;
  • .cer也是證書,常見于Windows系統(tǒng)。編碼類型同樣可以是DER或者PEM的,windows下有工具可以轉(zhuǎn)換crt到cer;
  • .csr證書簽名請求文件,一般是生成請求以后發(fā)送給CA,然后CA會給您簽名并發(fā)回證書
  • .key一般公鑰或者密鑰都會用這種擴展名,可以是DER編碼的或者是PEM編碼的。查看DER編碼的(公鑰或者密鑰)的文件的命令為: openssl rsa -inform DER -noout -text -in xxx.key。查看PEM編碼的(公鑰或者密鑰)的文件的命令為: openssl rsa -inform PEM -noout -text -in xxx.key;
  • .p12證書文件,包含一個X509證書和一個被密碼保護的私鑰

(4) 證書的種類

安全證書主要分為DV、OV和EV三個種類,對應(yīng)的安全等級為一般、較好和最高三個等級。三者的審核過程、審核標準和對應(yīng)的域名數(shù)量也不同,所以價格在一兩百元到幾萬元不等。

DV SSL:

DV SSL證書是只驗證網(wǎng)站域名所有權(quán)的簡易型(Class 1級)SSL證書,可10分鐘快速頒發(fā),能起到加密傳輸?shù)淖饔?,但無法向用戶證明網(wǎng)站的真實身份。

目前市面上的免費證書都是這個類型的,只是提供了對數(shù)據(jù)的加密,但是對提供證書的個人和機構(gòu)的身份不做驗證。

OV SSL:

OV SSL,提供加密功能,對申請者做嚴格的身份審核驗證,提供可信×××明。

和DV SSL的區(qū)別在于,OV SSL 提供了對個人或者機構(gòu)的審核,能確認對方的身份,安全性更高。

所以這部分的證書申請是收費的~

EV SSL:

超安=EV=最安全、最嚴格 超安EV SSL證書遵循全球統(tǒng)一的嚴格身份驗證標準,是目前業(yè)界安全級別最高的頂級 (Class 4級)SSL證書。

金融證券、銀行、第三方支付、網(wǎng)上商城等,重點強調(diào)網(wǎng)站安全、企業(yè)可信形象的網(wǎng)站,涉及交易支付、客戶隱私信息和賬號密碼的傳輸。

這部分的驗證要求最高,申請費用也是最貴的。

選擇簽發(fā)機構(gòu)時,最好選擇行業(yè)認可的全球范圍內(nèi)都可以使用的ca機構(gòu)簽發(fā)的證書。目前我們國內(nèi)的證書能夠符合標準的還不是特別多,主要原因是有一些證書不能夠被國外的瀏覽器所認可,在使用的時候需要進行一定的額外操作。

根據(jù)保護域名的數(shù)量,SSL證書又分為:

  • 單域名版:只保護一個域名,例如 www.abc.com 或者 login.abc.com 之類的單個域名
  • 多域名版:一張證書可以保護多個域名,例如同時保護 www.abc.com , www.bcd.com, pay.efg.com 等
  • 通配符版:一張證書保護同一個主域名下同一級的所有子域名,不限個數(shù),形如 *.abc.com 。注意,通配符版只有 DVSSL 和 OVSSL 具有, EVSSL 不具有通配符版本。

(5) 證書在哪里

當(dāng)你在下載并安裝瀏覽器時,瀏覽器內(nèi)部其實已經(jīng)內(nèi)嵌了全世界公認的根證書頒發(fā)機構(gòu)的證書。

若一個網(wǎng)站的數(shù)字證書的證書頒發(fā)機構(gòu)在瀏覽器中沒有,則需要引導(dǎo)用戶自行導(dǎo)入。

如果你想在 Chrome 中查看有哪些受信任的證書頒發(fā)機構(gòu),可以點擊 設(shè)置 -> 隱私設(shè)置與安全性 -> 安全 -> 管理證書

(6) 證書里的信息

在上圖的位置里,隨便雙擊點開一個證書,就可以查看證書里的內(nèi)容。

內(nèi)容非常多,最主要的有

  • 證書是哪個機構(gòu)的?
  • 證書里的公鑰是什么?
  • 證書有效期是什么時候?
  • 采用的哪種加解密的算法?

(7) 證書吊銷

證書是有生命周期的,如果證書的私鑰泄漏了那這個證書就得吊銷,一般有兩種吊銷方式:CRL和OCSP。

CRL( Certificate Revocation List)是CA機構(gòu)維護的一個已經(jīng)被吊銷的證書序列號列表,瀏覽器需要定時更新這個列表,瀏覽器在驗證證書合法性的時候也會在證書吊銷列表中查詢是否已經(jīng)被吊銷,如果被吊銷了那這個證書也是不可信的。可以看出,這個列表隨著被吊銷證書的增加而增加,列表會越來越大,瀏覽器還需要定時更新,實時性也比較差。

所以,后來就有了 OCSP (Online Certificate Status Protocol)在線證書狀態(tài)協(xié)議,這個協(xié)議就是解決了 CRL 列表越來越大和實時性差的問題而生的。有了這個協(xié)議,瀏覽器就可以不用定期更新CRL了,在驗證證書的時候直接去CA服務(wù)器實時校驗一下證書有沒有被吊銷就可以,是解決了CRL的問題,但是每次都要去CA服務(wù)器上校驗也會很慢,在網(wǎng)絡(luò)環(huán)境較差的時候或者跨國訪問的時候,體驗就非常差了,OCSP雖然解決了CRL的問題但是性能卻很差。

4. 如何生成 CSR 文件

CSR是Certificate Signing Request的英文縮寫,即證書簽名請求文件。

當(dāng)申請者申請數(shù)字證書時,CSP(加密服務(wù)提供者)生成私鑰,同時也生成了CSR文件。申請者將CSR文件提交至Certificate Authority (CA)機構(gòu)后,CA機構(gòu)使用其根證書私鑰簽名,從而就生成了數(shù)字證書。

申請者通過CSR文件,向CA機構(gòu)申請數(shù)字證書。獲取證書后,就能證明申請者的網(wǎng)站是可信的,數(shù)據(jù)傳輸是加密的。

接下來來了解一下,CSR 文件是如何生成的?

(1) 使用 OpenSSL 生成

假設(shè)申請的域名為 python.iswbm.com,公司名稱為派森時光科技,部門是IT部,公司在中國廣東省深圳市??赏ㄟ^運行下方命令行生成CSR文件:

  1. $ openssl req -new –SHA256 -newkey rsa:2048 -nodes -keyout python.iswbm.com.key -out python.iswbm.com.csr -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=派森時光科技/OU=IT/CN=python.iswbm.com" 

此命令行表示:

  • req參數(shù):表示證書請求request,用于生成CSR文件。
  • SHA256參數(shù):表示CSR簽名時用的摘要算法。
  • newkey參數(shù):表示指定證書的算法。參數(shù) 2048:表示密鑰對的長度。
  • nodes參數(shù):表示不對私鑰加密。
  • keyout參數(shù):表示生成的私鑰文件。名為iswbm.key的私鑰文件,需自行保管,用于獲取證書后的部署過程。
  • out參數(shù):表示生成的 CSR 文件。名為iswbm.com.csr的CSR文件,用于提交至CA機構(gòu)驗證信息,從而獲取證書。
  • subj參數(shù):表示CSR信息,具體有哪些參數(shù),可以繼續(xù)往下看。

subj參數(shù)說明:

  • C:Country,表示國家,申請者或申請企業(yè)所在國家的英文或兩位大寫國家代碼。如:CN
  • ST:State/Province,表示省份,申請者或申請企業(yè)所在地的省/市/自治區(qū)英文或拼音全稱。如:Guangdong
  • L:Locality,表示城市,申請者或申請企業(yè)所在城市的英文或拼音全稱。如:Shenzhen
  • O:Organization,表示申請者的姓名或申請企業(yè)的名稱。
  • OU:Organizational Unit,表示申請人所在部門的英文或拼音全稱。如:IT
  • CN:Common Name,表示你要為哪個域名申請證書,可是單域名(比如 python.iswbm.com),也可以是泛域名(*.iswbm.com),也可以是為多個域名申請一個證書(具體我沒操作過)。

上一條命令執(zhí)行完后,會在你的本地目錄下生成兩文件:

  • python.iswbm.com.csr:用于向CA機構(gòu)申請證書
    1. $ cat python.iswbm.com.csr 
    2. -----BEGIN CERTIFICATE REQUEST----- 
    3. MIIC0TCCAbkCAQAwgYsxCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAlHdWFuZ2Rvbmcx 
    4. ETAPBgNVBAcMCFNoZW56aGVuMS0wKwYDVQQKDCTDpsK0wr7DpsKjwq7DpsKXwrbD 
    5. ... 
    6. 7lgB4QC1aIFz8gi9TGMJU2LqTDJCj+tgM68LDBdMLeQ8XZ33C95Nl0qt7yG+zjlZ 
    7. 01jBh+T882r8x9gKdwb7nZSWFQY4/YTq+sY++YW/QuCNRcJ2vbM18U/HlIRsZ3su 
    8. x6Neh08
    9. -----END CERTIFICATE REQUEST----- 
  • python.iswbm.com.key:私鑰,自行保存,不要外泄
    1. $ cat python.iswbm.com.key 
    2. -----BEGIN PRIVATE KEY----- 
    3. MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC4OrcM9hTs9Hao 
    4. SzjsVJFX2Mmd+mToMG3u++o2Fd5yrPYq4COkT33lnL9kJNrDWqGp5TRkWqNwLaPl 
    5. ... 
    6. a/lKBWLcvxE+IQ+mxNbN058kEJ3l8WAcAFCebLm5czUqmIVa3JR+cBDLvGFZVn6z 
    7. 72AP5D/Evds4BOO+VzAiVLU6Ai78qhACuVExZNQCxdvJy4LxpeckUpCem9hAPiIY 
    8. LQfiTStBBU6t/+mnDyij+XreGQ== 
    9. -----END PRIVATE KEY----- 

(2) 使用在線生成工具

使用 OpenSSL 工具生成 CSR 文件的方法固然簡單,但使用時,需要你的了解代碼中參數(shù)的意思。

如果你不想花心思去記這些,推薦你使用 CSR在線生成工具(https://myssl.com/csr_create.html)

你只需簡單地輸入如下信息,再點擊 OpenSSL生成,你就可以獲得一條 OpenSSL 命令,這下你再也不用自己拼湊參數(shù)啦,真的太方便了。為什么不點擊 生成 讓其直接生成 私鑰文件 和 CSR文件 呢?當(dāng)然是為了安全起見啦。

5. TLS/SSL 保證信息的安全

在信息安全性問題中,我們常常要做到三點才能保證信息的安全:

  • 信息的保密性
  • 信息的完整性
  • 身份識別

將這三者結(jié)合起來,就是 TLS/SSL 做的事情

  • 客戶端(瀏覽器)向服務(wù)端發(fā)出請求,服務(wù)端返回證書給客戶端。
  • 客戶端拿到證書后,把證書里的簽名與及明文信息分別取出來,然后會用自身攜帶的CA機構(gòu)的公鑰去解密簽名,然后信息摘要1,然后再對明文信息進行HASH,得到一個信息摘要2,對比信息摘要1 和信息摘要2,如果一樣,說明證書是合法的,也就是證書里的公鑰是正確的。

以上采用的是非對稱加密(CA的公鑰和私鑰),保證了客戶端接收到服務(wù)端正確的公鑰,有了服務(wù)端的公鑰后,后面的信息加密都可以使用這個公鑰,而用這個公鑰加密過后的密文,只有服務(wù)端的私鑰能解,就算黑客拿到了也沒法解開。

 

責(zé)任編輯:趙寧寧 來源: Python編程時光
相關(guān)推薦

2021-09-26 05:59:16

數(shù)字簽名數(shù)字證書HTTPS

2011-08-29 10:27:38

IT技術(shù)數(shù)字簽名數(shù)字證書

2020-12-10 13:46:35

人工智能

2020-05-06 19:47:15

人工智能AI

2020-09-09 09:55:36

JavaNIOBIO

2018-09-21 15:50:58

數(shù)據(jù)庫MySQL分庫分表

2020-11-12 07:43:06

Redis冪等性接口

2020-07-29 10:40:21

Spring循環(huán)依賴Java

2021-06-25 09:47:59

Spring循環(huán)依賴Java

2020-05-07 10:05:58

Spring循環(huán)依賴Java

2010-09-02 21:10:13

2011-08-30 14:29:31

數(shù)字簽名數(shù)字證書

2013-06-28 10:24:31

2020-03-12 10:41:35

數(shù)字簽名加密證書劫持

2016-11-10 23:51:41

2020-06-18 11:58:13

蘋果MacOS保密

2019-10-17 09:26:05

MySQL數(shù)據(jù)庫InnoDB

2019-09-29 10:04:26

技術(shù)編程開發(fā)

2018-08-07 16:01:32

synchronizevolatilefinal

2021-01-11 13:32:14

比特幣加密貨幣區(qū)塊鏈
點贊
收藏

51CTO技術(shù)棧公眾號