您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關kubernetes中CFSSL如何構建本地CA的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
一:前言
SSL:Secure
Sockets Layer,標準化后叫"TLS",http協議默認情況下是不加密內容的,這樣就很可能在內容傳播的時候被別人監(jiān)聽到,對于安全性要求較高的場合,必須要加密,https就是帶加密的http協議。
消息-->[公鑰]-->加密后的信息-->[私鑰]-->消息
證書所有組織的信息
公鑰
證書頒發(fā)組織的信息
證書頒發(fā)組織授予的權限,如證書有效期、適用的主機名、用途等
使用證書頒發(fā)組織私鑰創(chuàng)建的數字簽名
每個公鑰都有一個對應的私鑰,后者在證書所有者的管控之下,可以用于對數據進行數字簽名,驗證器可以使用證書中的公鑰對數據進行驗證。如果證書本身包含第三方認證中心的數字簽名,那么只要驗證器信任該第三方,就可以確保證書是合法的。有時候,證書是由中介認證中心簽名,而中介認證中心的證書又是由不同的認證中心簽名。在這種情況下,證書驗證器會沿著這條鏈一直找到它信任的證書。對于認證中心而言,信任鏈模型非常有用,它允許我們將根證書的私鑰離線存儲,只為中介證書簽名。
二:CFSSL構建本地CA
1.創(chuàng)建自己的認證中心
CFSSL具有運行一個認證中心所需的全部功能。雖然CFSSL是為運行內部CA而創(chuàng)建,但它足夠健壯,可以用于公開的受信任CA。
運行認證中心需要一個CA證書(ca.pem)和相應的私鑰(ca-key.pem)。后者是極其敏感的數據。任何知道私鑰的人都可以充當CA頒發(fā)證書。因此,私鑰的保護至關重要。
2. 生成CA證書和私鑰
創(chuàng)建ca-csr.json文件
點擊(此處)折疊或打開
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
”CN“:Common Name,kube-apiserver 從證書中提取該字段作為請求的?戶名 (User Name);瀏覽器使用該字段驗證網站是否合法
"O":Organization ,kube-apiserver 從證書中提取該字段作為請求?戶所屬的組 (Group);
執(zhí)行命令 cfssl gencert -initca ca-csr.json | cfssljson -bare ca
生成: ca.pem ca-key.pem ca.csr(證書簽名請求,用于交叉簽名或重新簽名)
3.配置證書生成策略
配置證書生成策略,讓CA軟件知道頒發(fā)什么樣的證書.創(chuàng)建ca-config.json
點擊(此處)折疊或打開
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
}
}
}
}
ca-config.jso: 可以定義多個profiles,分別指定不同的過期時間,使用場景等參數,這里我們只定義了kubernetes一個profile
signing : 表示該證書可用于簽名其它證書,生成的ca.pem證書中 CA=TRUE
server auth : 表示client可以使用該CA對server提供的證書進行驗證
client auth : 表示server 可以用該CA對client提供的證書進行驗證
4.證書生成與簽名
截止目前,基于CFSSL的CA已經配置完成,該CA如何頒發(fā)證書呢?CFSSL提供了兩個命令:gencert和sign。gencert將自動處理整個證書生成過程。該過程需要兩個文件,一個告訴CFSSL本地客戶端CA的位置以及如何驗證請求,即config文件,另一個為CSR配置信息,用于填充CSR 即csr文件。
舉例:創(chuàng)建 kubernetes 證書簽名請求?件 kubernetes-csr.json (config文件采用之前的ca-config.json)
點擊(此處)折疊或打開
{
"CN": "kubernetes",
"hosts": [
"127.0.0.1",
"10.116.137.196",
"10.116.82.28",
"10.116.36.57",
"10.254.0.1",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key": {
"algo":"rsa",
"size":2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
如果 hosts 字段不為空則需要指定授權使用該證書的 IP 或域名列表,由于該證書后續(xù)被 etcd 集群和 kubernetes master 集群使用,所以上面分別指定了 etcd 集群、 kubernetes master 集群的主機 IP 和 kubernetes 服務的服務 IP(一般是 kube-apiserver 指定的 service-cluster-ip-range 網段的第一個IP,如 10.254.0.1。
hosts 中的內容可以為空,即使按照上面的配置,向集群中增加新節(jié)點后也不需要重新生成證書。
執(zhí)行命令:cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes
生成 kubernetes.csr kubernetes-key.pem kubernetes.pem 文件
感謝各位的閱讀!關于“kubernetes中CFSSL如何構建本地CA”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。