成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

網絡 通信技術
大家好,我是明哥。前段時間整理了關于數字證書和數字簽名的一些內容,今天整理一下發出來。

大家好,我是明哥。

前段時間整理了關于數字證書和數字簽名的一些內容,今天整理一下發出來。

我們都知道 HTTP 協議都是明文傳輸內容,為了保證數據傳輸的安全,HTTPS 協議就應運而生了,但它其實并不是一個全新的協議,而是HTTP 協議基本之上 再加上SSL/TLS 協議。

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

[[346870]]

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

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

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

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

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

(1) 對稱加密

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

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

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

對稱加密的優點是:速度快。

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

(2) 非對稱加密

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

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

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

他們二者的區別是:

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

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

非對稱加密的優點,就是安全系數特別高。缺點就是速度會慢一些。

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

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

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

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

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

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

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

(1) 信息摘要

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

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

關于摘要,有幾點需要你明白的:

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

(2) 數字簽名

摘要經過私鑰的加密后,便有了一個新的名字 -- 數字簽名。

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

那搞懂數字簽名的意義是什么?只要回答下面兩個問題即可。

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

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

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

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

答:由上面我們知道了非對稱加密的速度非常慢,如果傳輸的數據量非常大,那這個加密再解密的時間要遠比網絡傳輸的時間來得長,這樣反而會得不償失。

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

(3) 數字證書

在數字簽名那里,不知道你有沒有發現一個問題?

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

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

這就是問題所在。

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

數字證書就應運而生了。

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

  • 數字證書是什么東西?其實它就是一個 .crt 文件
  • 數字證書是誰頒發的?由權威證書認證機構頒發,一般我們簡稱為 CA 機構
  • 數字證書如何申請的?或者說如何頒發的?

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

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

3. 數字證書(Certificate)

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

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

(1) 數字證書擁有以下幾個優點

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

(2) 證書類型

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

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

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

(3) 擴展名

  • .crt證書文件,可以是DER(二進制)編碼的,也可以是PEM(ASCII (Base64))編碼的),在類unix系統中比較常見;
  • .cer也是證書,常見于Windows系統。編碼類型同樣可以是DER或者PEM的,windows下有工具可以轉換crt到cer;
  • .csr證書簽名請求文件,一般是生成請求以后發送給CA,然后CA會給您簽名并發回證書
  • .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三個種類,對應的安全等級為一般、較好和最高三個等級。三者的審核過程、審核標準和對應的域名數量也不同,所以價格在一兩百元到幾萬元不等。

DV SSL:

DV SSL證書是只驗證網站域名所有權的簡易型(Class 1級)SSL證書,可10分鐘快速頒發,能起到加密傳輸的作用,但無法向用戶證明網站的真實身份。

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

OV SSL:

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

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

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

EV SSL:

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

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

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

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

根據保護域名的數量,SSL證書又分為:

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

(5) 證書在哪里

當你在下載并安裝瀏覽器時,瀏覽器內部其實已經內嵌了全世界公認的根證書頒發機構的證書。

若一個網站的數字證書的證書頒發機構在瀏覽器中沒有,則需要引導用戶自行導入。

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

(6) 證書里的信息

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

內容非常多,最主要的有

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

(7) 證書吊銷

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

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

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

4. 如何生成 CSR 文件

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

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

申請者通過CSR文件,向CA機構申請數字證書。獲取證書后,就能證明申請者的網站是可信的,數據傳輸是加密的。

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

(1) 使用 OpenSSL 生成

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

subj參數說明:

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

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

  • python.iswbm.com.csr:用于向CA機構申請證書
    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 文件的方法固然簡單,但使用時,需要你的了解代碼中參數的意思。

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

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

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

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

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

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

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

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

 

責任編輯:趙寧寧 來源: Python編程時光
相關推薦

2021-09-26 05:59:16

數字簽名數字證書HTTPS

2011-08-29 10:27:38

IT技術數字簽名數字證書

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

數據庫MySQL分庫分表

2020-07-29 10:40:21

Spring循環依賴Java

2020-05-07 10:05:58

Spring循環依賴Java

2021-06-25 09:47:59

Spring循環依賴Java

2020-11-12 07:43:06

Redis冪等性接口

2011-08-30 14:29:31

數字簽名數字證書

2010-09-02 21:10:13

2013-06-28 10:24:31

2020-06-18 11:58:13

蘋果MacOS保密

2019-10-17 09:26:05

MySQL數據庫InnoDB

2019-09-29 10:04:26

技術編程開發

2020-03-12 10:41:35

數字簽名加密證書劫持

2016-11-10 23:51:41

2021-01-11 13:32:14

比特幣加密貨幣區塊鏈

2021-04-13 13:18:11

數字貨幣加密貨幣區塊鏈
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成av人影片在线观看 | 天天躁日日躁狠狠躁2018小说 | 成人av网站在线观看 | 国产一区二区在线播放视频 | .国产精品成人自产拍在线观看6 | 日韩av免费在线电影 | 视频三区 | 国产精品久久久99 | 国产日韩一区二区 | 色吧综合网 | 日本黄色免费大片 | 日日夜夜影院 | 蜜桃视频在线观看免费视频网站www | 午夜看片| 一区不卡在线观看 | 久久91| 久久久久9999亚洲精品 | 欧美电影大全 | 亚洲精品高清视频在线观看 | 久久伊 | 最新黄色在线观看 | 视频一区二区在线观看 | 免费h在线 | 午夜精品久久久久久久99黑人 | 欧美中文一区 | 中文字幕在线免费观看 | 精品乱码一区二区三四区视频 | 日韩av成人在线观看 | 亚洲视频 欧美视频 | 91.色| 97色在线观看免费视频 | 亚洲午夜视频 | 一区在线免费视频 | 91在线看片 | 91精品国产乱码久久久久久 | 精品视频久久久 | 午夜久久久久久久久久一区二区 | aⅴ色国产 欧美 | av一级久久 | 粉嫩国产精品一区二区在线观看 | 国产精品久久久久久久久久免费看 |