偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

讓你一文掌握 CA 證書

安全 數(shù)據(jù)安全 網(wǎng)絡(luò)
由于 CA 認(rèn)證和 HTTPS 認(rèn)證流程經(jīng)常在面試中被考察,同時(shí) miniblog 在啟用 HTTPS 服務(wù)時(shí)需要理解相關(guān)內(nèi)容。接下來,本課程將對(duì)這兩部分進(jìn)行詳細(xì)介紹。

在互聯(lián)網(wǎng)環(huán)境中,數(shù)據(jù)安全是每個(gè)開發(fā)者和用戶都會(huì)關(guān)注的核心問題。HTTPS(HyperText Transfer Protocol Secure)是一種基于加密傳輸?shù)木W(wǎng)絡(luò)協(xié)議,是應(yīng)用層保護(hù)通信安全、防止數(shù)據(jù)被竊聽和篡改的主要手段。

在很多一線企業(yè),例如騰訊、阿里、字節(jié)等,許多應(yīng)用強(qiáng)制要求使用 HTTPS 協(xié)議進(jìn)行通信,Kubernetes 也提倡通過 HTTPS 協(xié)議進(jìn)行通信。那么,為什么建議通過 HTTPS 協(xié)議而非 HTTP 協(xié)議?這源于二者的核心區(qū)別:

  • HTTP 協(xié)議以明文方式傳輸數(shù)據(jù),在網(wǎng)絡(luò)中傳輸時(shí)可能遭受竊聽、篡改或冒充攻擊,安全性較低,存在數(shù)據(jù)泄露風(fēng)險(xiǎn);
  • HTTPS 協(xié)議基于 HTTP 協(xié)議增加了 SSL 安全層,通過加密通道傳輸數(shù)據(jù),安全性更高。

通常,HTTPS 協(xié)議主要實(shí)現(xiàn)以下兩類功能:

  • 數(shù)據(jù)傳輸加密: 通過 HTTPS 傳輸?shù)臄?shù)據(jù)始終以加密形式存在,確保信息安全;
  • 身份認(rèn)證: HTTPS 支持單向認(rèn)證和雙向認(rèn)證。單向認(rèn)證用于驗(yàn)證服務(wù)端的真實(shí)性,雙向認(rèn)證則同時(shí)驗(yàn)證服務(wù)端和客戶端的合法性。

在實(shí)際的企業(yè)應(yīng)用中,HTTPS 的使用方式主要包括:

  • 利用 HTTPS 的數(shù)據(jù)加密能力,啟用單向認(rèn)證驗(yàn)證服務(wù)端的合法性,客戶端認(rèn)證則采用其他方式,例如 Bearer 認(rèn)證。miniblog 項(xiàng)目采用的正是這種方式;
  • 利用 HTTPS 的數(shù)據(jù)加密能力,同時(shí)通過雙向認(rèn)證驗(yàn)證服務(wù)端和客戶端的合法性。

由于 CA 認(rèn)證和 HTTPS 認(rèn)證流程經(jīng)常在面試中被考察,同時(shí) miniblog 在啟用 HTTPS 服務(wù)時(shí)需要理解相關(guān)內(nèi)容。接下來,本課程將對(duì)這兩部分進(jìn)行詳細(xì)介紹。

一、什么是 HTTPS?

HTTPS 是 HTTP(超文本傳輸協(xié)議)的安全版本。它通過在 HTTP 和傳輸層之間加入 SSL/TLS(安全套接字層/傳輸層安全協(xié)議)來確保通信安全。相比 HTTP,HTTPS 增加了三項(xiàng)核心功能:

  • 數(shù)據(jù)加密:通過加密技術(shù),確保通信內(nèi)容不會(huì)被第三方竊聽;
  • 身份驗(yàn)證:通過服務(wù)器證書驗(yàn)證服務(wù)器身份,防止中間人攻擊;

校驗(yàn)數(shù)據(jù)是否在傳輸過程中被篡改。

使用 HTTPS 后,數(shù)據(jù)從客戶端到服務(wù)器的整個(gè)過程都被加密保護(hù),只有通信雙方才能解碼數(shù)據(jù)。

二、認(rèn)識(shí) CA 證書

CA 證書的內(nèi)容較多,可以從以下四個(gè)方面掌握 CA 證書相關(guān)知識(shí):

  • CA 證書相關(guān)名詞;
  • CA 證書簽發(fā)流程;
  • CA 證書認(rèn)證流程;
  • CA 證書簽發(fā)實(shí)戰(zhàn)。

1. CA 證書相關(guān)名詞

CA 證書涉及眾多名詞,以下整理了一些核心名詞,供參考:

(1) CA: 數(shù)字證書認(rèn)證機(jī)構(gòu)(Certificate Authority,簡稱 CA),是負(fù)責(zé)發(fā)放和管理數(shù)字證書的權(quán)威機(jī)構(gòu),作為受信任的第三方,承擔(dān)公鑰體系中公鑰合法性檢驗(yàn)的職責(zé);

(2) CA 證書: CA 證書是由 CA 簽發(fā)的數(shù)字證書,其格式可能有所不同,目前最常使用的是 X.509 證書格式;

(3) 公鑰和私鑰: 公鑰(Public Key)和私鑰(Private Key)是一對(duì)密鑰,通過特定算法生成。公鑰是密鑰對(duì)中公開的部分,通常用于加密會(huì)話密鑰、驗(yàn)證數(shù)字簽名或加密需通過相應(yīng)私鑰解密的數(shù)據(jù);私鑰則是非公開的部分;

(4) 加密算法: 可以使用多種加密算法對(duì)數(shù)據(jù)進(jìn)行加密。常見的加密算法包括以下兩類:

(5) 對(duì)稱加密: 只有一個(gè)密鑰進(jìn)行加密和解密,密鑰相同且加解密速度較快。典型的對(duì)稱加密算法包括 DES 和 AES 等;

(6) 密鑰以成對(duì)形式出現(xiàn)(公鑰和私鑰),公鑰和私鑰互為匹配,且無法通過公鑰推導(dǎo)出私鑰,反之亦然。公鑰用于加密時(shí)需通過私鑰解密,私鑰用于加密時(shí)需通過公鑰解密。與對(duì)稱加密相比,其速度較慢。典型非對(duì)稱加密算法包括 RSA 和 DSA 等。

(7) X.509 證書編碼格式: X.509 證書可能采用不同的編碼規(guī)則。目前編碼格式主要包括以下兩種:

  • PEM(Privacy Enhanced Mail): 文本格式,文件后綴為 .pem,以 -----BEGIN XXXXXX----- 開頭,-----END XXXXXX----- 結(jié)尾,內(nèi)容為 BASE64 編碼。多用于 Apache 和 UNIX 服務(wù)器;
  • DER(Distinguished Encoding Rules): 二進(jìn)制格式,文件后綴為 .der,不可讀。多用于 Java 和 Windows 服務(wù)器。

(8) X.509 證書文件后綴:X.509 證書的文件后綴不一定是 .pem 或 .der,以下是常見類型:

  • CRT(.crt): 代表 Certificate,意為證書,常見于 UNIX 系統(tǒng),可能采用 PEM 或 DER 編碼,大多數(shù)為 PEM 編碼;
  • CER(.cer): 代表 Certificate,意為證書,常見于 Windows 系統(tǒng),可能采用 PEM 或 DER 編碼,大多數(shù)為 DER 編碼;
  • KEY(.key): 通常存放公鑰或私鑰,雖非 X.509 證書,但其編碼格式可能為 PEM 或 DER;
  • CSR(.csr): Certificate Signing Request,即證書簽名請(qǐng)求。CSR 不是證書,而是向權(quán)威證書頒發(fā)機(jī)構(gòu)申請(qǐng)簽名證書的請(qǐng)求,其主要包含一個(gè)公鑰及附加信息。在生成申請(qǐng)時(shí),會(huì)同時(shí)生成一個(gè)私鑰,需自行妥善保管,無需提交給 CA 機(jī)構(gòu)。

需要特別注意的是,如果證書文件的后綴是.pem 或.der,在文件名中應(yīng)體現(xiàn)文件所屬類別,例如:server-key.pem 表示私鑰文件,server-crt.pem 表示證書文件。

為了更好地理解 CA 相關(guān)內(nèi)容,接下來將以 CA 的簽發(fā)流程為主線,在介紹流程的同時(shí),闡述相關(guān)概念,CA 的認(rèn)證流程實(shí)際上也是 HTTPS 的認(rèn)證流程。

2. CA 證書的簽發(fā)流程

CA 證書認(rèn)證流程如下圖所示:

上圖所示的流程解釋如下:

(1) 服務(wù)端向第三方機(jī)構(gòu) CA 提交公鑰、組織信息、個(gè)人信息(如域名)等內(nèi)容并申請(qǐng)認(rèn)證(無需提交私鑰);

(2) CA 通過線上、線下等多種手段驗(yàn)證申請(qǐng)者提供信息的真實(shí)性,例如確認(rèn)組織是否存在、企業(yè)是否合法、是否擁有域名的所有權(quán)等;

(3) 如果信息審核通過,CA 會(huì)向申請(qǐng)者簽發(fā)認(rèn)證文件(證書):

  • 證書包含以下信息:申請(qǐng)者的公鑰、組織信息和個(gè)人信息、簽發(fā)機(jī)構(gòu) CA 的信息、證書有效期、證書序列號(hào)等明文信息,同時(shí)還包含一個(gè)簽名;
  • 簽名的生成算法:首先,使用散列函數(shù)計(jì)算明文信息的信息摘要,然后,采用 CA 的私鑰對(duì)信息摘要進(jìn)行加密,生成的密文即為簽名。

(4) 客戶端向服務(wù)端發(fā)出請(qǐng)求后,服務(wù)端返回服務(wù)端的證書文件;

(5) 客戶端讀取服務(wù)端證書中的明文信息,并使用相同的散列函數(shù)計(jì)算信息摘要。隨后,利用對(duì)應(yīng) CA 的公鑰解密簽名數(shù)據(jù)并對(duì)比信息摘要。如果兩者一致,則可以確認(rèn)證書的合法性,即公鑰合法。同時(shí),客戶端還需驗(yàn)證證書中的域名信息、有效期等內(nèi)容??蛻舳送ǔ?nèi)置信任 CA 的根證書(包含公鑰),如果 CA 不被信任,則無法找到對(duì)應(yīng) CA 的證書,該證書將被判定為非法;

(6) 客戶端生成一個(gè)隨機(jī)數(shù) R,并用服務(wù)端證書中的公鑰加密后發(fā)送給服務(wù)端。服務(wù)端使用其私鑰解密獲取隨機(jī)數(shù) R,隨后雙方使用對(duì)稱加密算法進(jìn)行數(shù)據(jù)交換。

提示:證書由以下部分組成:公鑰(服務(wù)端生成的密鑰對(duì)中的公鑰)+申請(qǐng)者與頒發(fā)者信息+簽名(使用 CA 機(jī)構(gòu)生成的密鑰對(duì)中的私鑰進(jìn)行簽名)。頒發(fā)證書的過程實(shí)際上是 CA 使用其私鑰對(duì)證書請(qǐng)求文件進(jìn)行簽名。

3. CA 認(rèn)證流程

CA 證書的認(rèn)證分為單向認(rèn)證和雙向認(rèn)證。在實(shí)際開發(fā)中,可根據(jù)需要自行選擇:

  • 單向認(rèn)證:適用于無需在通信層對(duì)用戶身份進(jìn)行驗(yàn)證的場景,一般在應(yīng)用邏輯層保證用戶的合法登錄。單向認(rèn)證也是企業(yè)應(yīng)用中,使用最多的認(rèn)證方式;
  • 雙向認(rèn)證:要求通信雙方相互驗(yàn)證身份。例如,在企業(yè)應(yīng)用服務(wù)之間存在互調(diào)關(guān)系時(shí),可能需要對(duì)通信雙方進(jìn)行身份驗(yàn)證。

(1) 單向認(rèn)證流程

單向認(rèn)證流程如下圖所示。

上圖 已經(jīng)清晰的展示了單向流程的步驟,這里不再詳解。需要注意的是第 3 步使用的是 CA 機(jī)構(gòu)證書(根證書)的公鑰來解密簽名。

通過上述單向認(rèn)證流程可以看出,整個(gè)流程需要以下三個(gè)證書文件:根證書、服務(wù)器端公鑰證書、服務(wù)器端私鑰文件。

(2) 雙向認(rèn)證流程

單向認(rèn)證僅驗(yàn)證了服務(wù)端的身份。如果有人冒充客戶端,該如何應(yīng)對(duì)?此時(shí)可以采用雙向認(rèn)證。

雙向認(rèn)證 SSL 握手過程與單向認(rèn)證有所不同,其大部分步驟與單向認(rèn)證過程相同。但在客戶端成功驗(yàn)證服務(wù)器后,新增了服務(wù)器驗(yàn)證客戶端的流程步驟。雙向認(rèn)證流程如下圖所示。

通過上述雙向認(rèn)證流程可以看出,整個(gè)雙向認(rèn)證過程需要 5 個(gè)證書文件:根證書、服務(wù)器端公鑰證書、服務(wù)器端私鑰文件、客戶端公鑰證書、客戶端私鑰文件。

4. CA 證書簽發(fā)實(shí)戰(zhàn)

CA 證書由權(quán)威的 CA 機(jī)構(gòu)簽發(fā),其簽發(fā)流程較為復(fù)雜且費(fèi)用較高。在后端應(yīng)用開發(fā)中,通常由開發(fā)或運(yùn)維人員自行生成根證書及其私鑰,并扮演 CA 的角色,負(fù)責(zé)為其他服務(wù)端和客戶端簽發(fā)證書,此類證書也稱為自簽證書。

在企業(yè)應(yīng)用開發(fā)中,可以使用 openssl 工具來簽發(fā)根證書、服務(wù)端證書和客戶端證書。使用 openssl 工具簽發(fā)證書具體包括以下幾步:

  • 簽發(fā)根證書和私鑰;
  • 生成服務(wù)端證書;
  • 生成客戶端證書;

(1) 步驟一:簽發(fā)根證書和私鑰

簽發(fā)根證書和私鑰包括以下 3 步操作:生成根證書私鑰、生成請(qǐng)求文件、生成根證書。

① 生成根證書****私鑰

使用以下命令生成根證書私鑰:

$ openssl genrsa -out ca.key 1024

genrsa 子命令主要用于生成 RSA 私鑰。命令行格式:openssl genrsa [args] [numbits]。涉及參數(shù)說明如下:

  • -out file:將生成的私鑰保存至指定的文件中;
  • numbits:指定生成私鑰的大小,默認(rèn)是 2048。

② 生成請(qǐng)求文件

使用證書私鑰生成請(qǐng)求文件,命令如下:

$ openssl req -new -key ca.key -out ca.csr -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=devops/OU=it/CN=127.0.0.1/emailAddress=colin404@foxmail.com"

req 子命令主要用于創(chuàng)建證書請(qǐng)求文件,其命令行格式為:openssl req [options] <infile> outfile。參數(shù)說明如下:

  • -new:創(chuàng)建新的證書請(qǐng)求文件;
  • -key file:指定創(chuàng)建證書請(qǐng)求所使用的私鑰文件;
  • -out arg:指定輸出文件路徑;
  • -subj arg:設(shè)置或修改證書請(qǐng)求中的主體信息。

證書請(qǐng)求的主體信息選項(xiàng)說明如下:

  • CN(Common Name):指定證書中標(biāo)識(shí)身份的名稱,該名稱必須唯一。通常填寫需要申請(qǐng) SSL 證書的域名(domain)或子域名(subdomain);
  • C(Country): 國家代碼;
  • ST(State): 州或?。?/li>
  • L(Locality): 城市;
  • O(Organization): 組織名稱;
  • OU(Organizational Unit): 組織單位名稱。

提示:不同證書的 CSR 文件,其 CN、C、ST、L、O、OU 的組合必須不同。在創(chuàng)建后續(xù)證書的 CSR 文件時(shí),CN 必須各不相同,而 C、ST、L、O 和 OU 可以相同,以實(shí)現(xiàn)區(qū)分證書的目的。

 ③ 生成根證書

執(zhí)行以下命令生成根證書:

$ openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt

x509 命令主要用于創(chuàng)建和修改 x509 證書,其命令行格式如下:openssl x509 [options] <infile> outfile。參數(shù)說明如下:

  • -in arg:指定輸入文件,默認(rèn)為標(biāo)準(zhǔn)輸入;
  • -out arg:指定輸出文件,默認(rèn)為標(biāo)準(zhǔn)輸出;
  • -req:指定輸入文件為證書請(qǐng)求;
  • -signkey arg:指定用于自簽名的私鑰文件;
  • -CA arg:設(shè)置 CA 文件,必須為 PEM 格式;
  • -CAkey arg:設(shè)置 CA 私鑰文件,必須為 PEM 格式;
  • -CAcreateserial:創(chuàng)建序列號(hào)文件。

(2) 步驟二:生成服務(wù)端證書

執(zhí)行以下命令來生成服務(wù)端證書:

# 1. 生成服務(wù)端私鑰
$ openssl genrsa -out server.key 1024
# 2. 生成服務(wù)端公鑰
$ openssl rsa -in server.key -pubout -out server.pem
# 3. 生成服務(wù)端向 CA 申請(qǐng)簽名的 CSR
$ openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=serverdevops/OU=serverit/CN=127.0.0.1/emailAddress=nosbelm@qq.com"
# 4. 生成服務(wù)端帶有 CA 簽名的證書
$ openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

上述命令中,rsa 子命令主要用于處理 RSA 公私鑰文件。命令行格式:openssl rsa [options] <infile> outfile。涉及參數(shù)說明如下:

  • -in arg: 指定輸入文件;
  • -pubout:指定輸出文件為公鑰,默認(rèn)為私鑰;
  • -out arg:指定輸出文件。

(3) 步驟三:生成客戶端證書

執(zhí)行以下命令來生成客戶端證書:

# 1. 生成客戶端私鑰
$ openssl genrsa -out client.key 1024
# 2. 生成客戶端公鑰
$ openssl rsa -in client.key -pubout -out client.pem
# 3. 生成客戶端向 CA 申請(qǐng)簽名的 CSR
$ openssl req -new -key client.key -out client.csr -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=clientdevops/OU=clientit/CN=127.0.0.1/emailAddress=nosbelm@qq.com"
# 4. 生成客戶端帶有 CA 簽名的證書
$ openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt


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

2022-09-29 10:26:59

iOSScaffoldflutter

2025-06-04 03:21:00

RAGRetrievalGeneratio

2022-12-20 07:39:46

2023-12-21 17:11:21

Containerd管理工具命令行

2023-03-10 22:08:20

2022-10-21 17:24:34

契約測試定位

2018-05-21 10:20:22

人工智能機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

2018-02-02 11:17:42

IaaSPaaSSaaS

2021-05-12 18:22:36

Linux 內(nèi)存管理

2024-09-26 07:27:27

2023-10-24 11:44:21

2023-10-04 00:02:00

本文將從入門到精通,冒泡排序

2020-11-12 09:14:25

JAVA.IO、字符編

2021-10-20 08:49:30

Vuexvue.js狀態(tài)管理模式

2019-07-03 15:32:26

路由器網(wǎng)絡(luò)系統(tǒng)

2018-02-03 09:59:20

python程序編輯器

2021-01-21 14:26:56

大數(shù)據(jù)互聯(lián)網(wǎng)大數(shù)據(jù)應(yīng)用

2022-03-18 09:45:43

Git分支Linux

2020-10-09 07:56:52

Linux

2023-12-15 09:45:21

阻塞接口
點(diǎn)贊
收藏

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