面向?qū)ο缶幊?/a>詳解">JavaScript面向?qū)ο缶幊?/a>詳解
1315
2025-04-01
SSL證書詳解和CFSSL工具使用
1.公鑰基礎(chǔ)設(shè)施PKI基礎(chǔ)概念
CA(Certification Authority)證書,指的是權(quán)威機(jī)構(gòu)給我們頒發(fā)的證書。
密鑰就是用來加解密用的文件或者字符串。密鑰在非對稱加密的領(lǐng)域里,指的是私鑰和公鑰,他們總是成對出現(xiàn),其主要作用是加密和解密。常用的加密強(qiáng)度是2048bit。
RSA即非對稱加密算法。非對稱加密有兩個不一樣的密碼,一個叫私鑰,另一個叫公鑰,用其中一個加密的數(shù)據(jù)只能用另一個密碼解開,用自己的都解不了,也就是說用公鑰加密的數(shù)據(jù)只能由私鑰解開。
證書的編碼格式
PEM(Privacy Enhanced Mail),通常用于數(shù)字證書認(rèn)證機(jī)構(gòu)(Certificate Authorities,CA),擴(kuò)展名為.pem, .crt, .cer, 和 .key。內(nèi)容為Base64編碼的ASCII碼文件,有類似"-----BEGIN CERTIFICATE-----" 和 "-----END CERTIFICATE-----"的頭尾標(biāo)記。服務(wù)器認(rèn)證證書,中級認(rèn)證證書和私鑰都可以儲存為PEM格式(認(rèn)證證書其實就是公鑰)。Apache和nginx等類似的服務(wù)器使用PEM格式證書。
DER(Distinguished Encoding Rules),與PEM不同之處在于其使用二進(jìn)制而不是Base64編碼的ASCII。擴(kuò)展名為.der,但也經(jīng)常使用.cer用作擴(kuò)展名,所有類型的認(rèn)證證書和私鑰都可以存儲為DER格式。Java使其典型使用平臺。
證書簽名請求CSR
CSR(Certificate Signing Request),它是向CA機(jī)構(gòu)申請數(shù)字×××?xí)鴷r使用的請求文件。 在生成請求文件前,我們需要準(zhǔn)備一對對稱密鑰。私鑰信息自己保存,請求中會附上公鑰信息以及國家,城市,域名,Email等信息,CSR中還會附上簽名信息。當(dāng)我們準(zhǔn)備好CSR文件后就可以提交給CA機(jī)構(gòu),等待他們給我們簽名,簽好名后我們會收到crt文件,即證書。
注意:CSR并不是證書。而是向權(quán)威證書頒發(fā)機(jī)構(gòu)獲得簽名證書的申請。
把CSR交給權(quán)威證書頒發(fā)機(jī)構(gòu),權(quán)威證書頒發(fā)機(jī)構(gòu)對此進(jìn)行簽名,完成。保留好CSR,當(dāng)權(quán)威證書頒發(fā)機(jī)構(gòu)頒發(fā)的證書過期的時候,你還可以用同樣的CSR來申請新的證書,key保持不變.
數(shù)字簽名
數(shù)字簽名就是"非對稱加密+摘要算法",其目的不是為了加密,而是用來防止他人篡改數(shù)據(jù)。
其核心思想是:比如A要給B發(fā)送數(shù)據(jù),A先用摘要算法得到數(shù)據(jù)的指紋,然后用A的私鑰加密指紋,加密后的指紋就是A的簽名,B收到數(shù)據(jù)和A的簽名后,也用同樣的摘要算法計算指紋,然后用A公開的公鑰解密簽名,比較兩個指紋,如果相同,說明數(shù)據(jù)沒有被篡改,確實是A發(fā)過來的數(shù)據(jù)。假設(shè)C想改A發(fā)給B的數(shù)據(jù)來欺騙B,因為篡改數(shù)據(jù)后指紋會變,要想跟A的簽名里面的指紋一致,就得改簽名,但由于沒有A的私鑰,所以改不了,如果C用自己的私鑰生成一個新的簽名,B收到數(shù)據(jù)后用A的公鑰根本就解不開。
常用的摘要算法有MD5、SHA1、SHA256。
使用私鑰對需要傳輸?shù)奈谋镜恼M(jìn)行加密,得到的密文即被稱為該次傳輸過程的簽名。
數(shù)字證書和公鑰
數(shù)字證書則是由證書認(rèn)證機(jī)構(gòu)(CA)對證書申請者真實身份驗證之后,用CA的根證書對申請人的一些基本信息以及申請人的公鑰進(jìn)行簽名(相當(dāng)于加蓋發(fā)證書機(jī) 構(gòu)的公章)后形成的一個數(shù)字文件。實際上,數(shù)字證書就是經(jīng)過CA認(rèn)證過的公鑰,除了公鑰,還有其他的信息,比如Email,國家,城市,域名等。
2.cfssl介紹
項目地址: https://github.com/cloudflare/cfssl
-: https://pkg.cfssl.org/
參考鏈接: https://blog.cloudflare.com/how-to-build-your-own-public-key-infrastructure/
CFSSL是CloudFlare開源的一款PKI/TLS工具。 CFSSL 包含一個命令行工具 和一個用于 簽名,驗證并且捆綁TLS證書的 HTTP API 服務(wù)。 使用Go語言編寫。
CFSSL包括:
一組用于生成自定義 TLS PKI 的工具
cfssl程序,是CFSSL的命令行工具
multirootca程序是可以使用多個簽名密鑰的證書頒發(fā)機(jī)構(gòu)服務(wù)器
mkbundle程序用于構(gòu)建證書池
cfssljson程序,從cfssl和multirootca程序獲取JSON輸出,并將證書,密鑰,CSR和bundle寫入磁盤
PKI借助數(shù)字證書和公鑰加密技術(shù)提供可信任的網(wǎng)絡(luò)身份。通常,證書就是一個包含如下身份信息的文件:
證書所有組織的信息
公鑰
證書頒發(fā)組織的信息
證書頒發(fā)組織授予的權(quán)限,如證書有效期、適用的主機(jī)名、用途等
使用證書頒發(fā)組織私鑰創(chuàng)建的數(shù)字簽名
*2*|***2***安裝cfssl
cfssl用法參考:https://coreos.com/os/docs/latest/generate-self-signed-certificates.html
這里我們只用到cfssl工具和cfssljson工具:
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64 mv cfssl_linux-amd64 /usr/local/bin/cfssl mv cfssljson_linux-amd64 /usr/local/bin/cfssljson mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo
1
2
3
4
5
6
7
cfssl工具,子命令介紹:
bundle: 創(chuàng)建包含客戶端證書的證書包
genkey: 生成一個key(私鑰)和CSR(證書簽名請求)
scan: 掃描主機(jī)問題
revoke: 吊銷證書
certinfo: 輸出給定證書的證書信息, 跟cfssl-certinfo 工具作用一樣
gencrl: 生成新的證書吊銷列表
selfsign: 生成一個新的自簽名密鑰和 簽名證書
print-defaults: 打印默認(rèn)配置,這個默認(rèn)配置可以用作模板
config:生成ca配置模板文件
csr:生成證書請求模板文件
serve: 啟動一個HTTP API服務(wù)
gencert: 生成新的key(密鑰)和簽名證書
-initca:初始化一個新ca
-ca:指明ca的證書
-ca-key:指明ca的私鑰文件
-config:指明請求證書的json文件
-profile:與-config中的profile對應(yīng),是指根據(jù)config中的profile段來生成證書的相關(guān)信息
ocspdump
ocspsign
info: 獲取有關(guān)遠(yuǎn)程簽名者的信息
sign: 簽名一個客戶端證書,通過給定的CA和CA密鑰,和主機(jī)名
ocsprefresh
ocspserve
*2*|***3***創(chuàng)建認(rèn)證中心(CA)
CFSSL可以創(chuàng)建一個獲取和操作證書的內(nèi)部認(rèn)證中心。
運行認(rèn)證中心需要一個CA證書和相應(yīng)的CA私鑰。任何知道私鑰的人都可以充當(dāng)CA頒發(fā)證書。因此,私鑰的保護(hù)至關(guān)重要。
配置證書生成策略
配置證書生成策略,讓CA軟件知道頒發(fā)有什么功能的證書。
#打印config模板文件從而進(jìn)行修改 #cfssl print-defaults config > ca-config.json #對模板進(jìn)行修改,從而變成適合自己的 #vim ca-config.json { "signing": { "default": { "expiry": "8760h" }, "profiles": { "kubernetes": { "usages": [ "signing", "key encipherment", "server auth", "client auth" ], "expiry": "8760h" } } } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
這個策略,有一個default默認(rèn)的配置,和一個profiles,profiles可以設(shè)置多個profile,這里的profile是etcd。
default默認(rèn)策略,指定了證書的默認(rèn)有效期是一年(8760h)
kubernetes:表示該配置(profile)的用途是為kubernetes生成證書及相關(guān)的校驗工作
signing:表示該證書可用于簽名其它證書;生成的 ca.pem 證書中 CA=TRUE
server auth:表示可以該CA 對 server 提供的證書進(jìn)行驗證
client auth:表示可以用該 CA 對 client 提供的證書進(jìn)行驗證
expiry:也表示過期時間,如果不寫以default中的為準(zhǔn)
cfssl常用命令:
cfssl gencert -initca ca-csr.json | cfssljson -bare ca ## 初始化ca
cfssl gencert -initca -ca-key key.pem ca-csr.json | cfssljson -bare ca ## 使用現(xiàn)有私鑰, 重新生成
cfssl certinfo -cert ca.pem
cfssl certinfo -csr ca.csr
生成CA證書和私鑰(root 證書和私鑰)
創(chuàng)建一個文件ca-csr.json:
#打印csr模板文件從而進(jìn)行修改 #cfssl print-defaults csr > ca-csr.json #vim ca-csr.json { "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "ShangHai", "L": "ShangHai", "O": "k8s", "OU": "System" } ] }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
參數(shù)介紹:
CN: Common Name,瀏覽器使用該字段驗證網(wǎng)站是否合法,一般寫的是域名。非常重要。瀏覽器使用該字段驗證網(wǎng)站是否合法
key:生成證書的算法
hosts:表示哪些主機(jī)名(域名)或者IP可以使用此csr申請的證書,為空或者""表示所有的都可以使用(本例中沒有hosts字段)
names:一些其它的屬性
C: Country, 國家
ST: State,州或者是省份
L: Locality Name,地區(qū),城市
O: Organization Name,組織名稱,公司名稱(在k8s中常用于指定Group,進(jìn)行RBAC綁定)
OU: Organization Unit Name,組織單位名稱,公司部門
生成CA證書和CA私鑰和CSR(證書簽名請求):
[root@ks-allinone ssl]# cfssl gencert -initca csr.json | cfssljson -bare ca 2019/08/21 21:10:32 [INFO] generating a new CA key and certificate from CSR 2019/08/21 21:10:32 [INFO] generate received request 2019/08/21 21:10:32 [INFO] received CSR 2019/08/21 21:10:32 [INFO] generating key: ecdsa-256 2019/08/21 21:10:32 [INFO] encoded CSR 2019/08/21 21:10:32 [INFO] signed certificate with serial number 672899525398989895780710333033770062104419034384 [root@ks-allinone ssl]# ll total 20 -rw-r--r--. 1 root root 505 Aug 21 21:10 ca.csr -rw-------. 1 root root 227 Aug 21 21:10 ca-key.pem -rw-r--r--. 1 root root 745 Aug 21 21:10 ca.pem -rw-r--r--. 1 root root 373 Aug 21 14:21 config.json -rw-r--r--. 1 root root 287 Aug 21 14:11 csr.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
該命令會生成運行CA所必需的文件ca-key.pem(私鑰)和ca.pem(證書),還會生成ca.csr(證書簽名請求),用于交叉簽名或重新簽名。
查看cert(證書信息):
# cfssl certinfo -cert ca.pem
1
查看CSR(證書簽名請求)信息:
# cfssl certinfo -csr ca.csr
1
SSL證書管理
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。