柚子快報(bào)激活碼778899分享:cfssl簡單使用
柚子快報(bào)激活碼778899分享:cfssl簡單使用
1、安裝
方式1:直接下載
詳見:手動(dòng)生成證書 | Kubernetes??
# 1、下載cfssl、cfssljson、cfssl-certinfo
# cfssl:用于簽發(fā)證書
# cfssljson:將cfssl簽發(fā)生成的證書(json格式)變成文件承載式文件
# cfssl-certinfo:驗(yàn)證查看證書信息
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/local/bin/cfssl
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/local/bin/cfssljson
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/local/bin/cfssl-certinfo
# 2、給cfssl、cfssljson、cfssl-certinfo添加可執(zhí)行權(quán)限
chmod +x /usr/local/bin/cfssl*
方式2:源碼編譯
詳見:https://github.com/cloudflare/cfssl
安裝go:
# 1、下載頁面:https://go.dev/dl/
# 2、下載go
wget https://go.dev/dl/go1.21.6.linux-amd64.tar.gz
# 3、解壓
tar -xf go1.21.6.linux-amd64.tar.gz
# 4、移動(dòng)go到/usr/local/go
mv go /usr/local/go
# 5、添加到環(huán)境變量
vi /root/.bash_profile
# 6、/root/.bash_profile文件內(nèi)容:
# 內(nèi)容開始----------------------------------------------
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
# 【此處添加go相關(guān)信息,并追加到PATH環(huán)境變量中】
GO_PATH=/usr/local/go/bin
PATH=$PATH:$HOME/bin:$GO_PATH
export PATH
# 內(nèi)容結(jié)束----------------------------------------------
# 7、使環(huán)境變量生效
source /root/.bash_profile
# 8、在任意目錄執(zhí)行
go version
安裝cfssl:
# 1、下載頁面:https://github.com/cloudflare/cfssl/releases
# 2、下載cfssl
wget https://github.com/cloudflare/cfssl/archive/refs/tags/v1.6.4.tar.gz -O cfssl-1.6.4.tar.gz
# 3、解壓
tar -xf cfssl-1.6.4.tar.gz
# 4、進(jìn)入目錄
cd cfssl-1.6.4
# 5、編譯
make
# 6、查看編譯后的可執(zhí)行文件
ls bin
# 7、可將bin目錄下的文件移動(dòng)到/usr/local/bin
# 移動(dòng)部分可執(zhí)行文件
mv cfssl /usr/local/bin/cfssl
mv cfssl-certinfo /usr/local/bin/cfssl-certinfo
mv cfssljson /usr/local/bin/cfssljson
2、使用
https://github.com/cloudflare/cfssl/tree/master
查看某個(gè)命令使用:cfssl [command] -help,其中[command]為某個(gè)命令名稱
# cfssl命令,cfssl 或者 cfssl -help 或者 cfssl -h 或者 cfssl [command] -h
cfssl
No command is given.
Usage:
Available commands:
ocspdump
revoke 吊銷證書
info 獲取簽名者信息
serve 啟動(dòng)HTTP API服務(wù)器
genkey 生成私鑰和證書請(qǐng)求
ocspserve
scan
selfsign 生成自簽證書
bundle 生成證書bundle
certinfo 查看證書信息
ocsprefresh
ocspsign
print-defaults 打印默認(rèn)配置
sign 簽名證書
version 查看版本
gencert 生成私鑰和證書
gencrl 生成新的證書吊銷列表
Top-level flags:
-allow_verification_with_non_compliant_keys
Allow a SignatureVerifier to use keys which are technically non-compliant with RFC6962.
-loglevel int
Log level (0 = DEBUG, 5 = FATAL) (default 1)
2.1、print-defaults
2.1.1、查看config配置
# 查看config默認(rèn)配置
cfssl print-defaults config
# 默認(rèn)配置數(shù)據(jù)
{
"signing": {
"default": {
"expiry": "168h"
},
"profiles": {
"www": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"server auth"
]
},
"client": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"client auth"
]
}
}
}
}
expiry:8760h,表示8760h/24=365天有效期profiles:指定證書使用場(chǎng)景,后續(xù)簽名生成證書及其私鑰時(shí)需要指定該場(chǎng)景(profile)名稱signing:表示該證書可用于簽名其它證書,生成的 ca.pem 證書中 CA=TRUEserver auth:表示 client 可以用該該證書對(duì) server 提供的證書進(jìn)行驗(yàn)證client auth:表示 server 可以用該該證書對(duì) client 提供的證書進(jìn)行驗(yàn)證
2.1.2、查看csr配置
# 查看csr默認(rèn)配置
cfssl print-defaults csr
# csr默認(rèn)數(shù)據(jù)
{
"CN": "example.net",
"hosts": [
"example.net",
"www.example.net"
],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"C": "US",
"L": "CA",
"ST": "San Francisco"
}
]
}
CN字段說明:
CN:Common Name,所有csr文件都必須有字段,對(duì)于 SSL 證書,一般為網(wǎng)站域名;而對(duì)于代碼簽名證書則為申請(qǐng)單位名稱;而對(duì)于客戶端證書則為證書申請(qǐng)者的姓名。
hosts字段說明:
hosts:網(wǎng)絡(luò)請(qǐng)求url中的合法主機(jī)名或域名集合。
注意:
1) 超過該集合范圍的任何請(qǐng)求都不會(huì)被支持認(rèn)證通過。
2) CA根證書及其私鑰創(chuàng)建過程不需要甚至該字段。其它服務(wù)證書創(chuàng)建必須有該字段。
3) hosts設(shè)置技巧:一般都把"127.0.0.1"包含進(jìn)去;推薦使用域名或vip(vip即虛擬ip),盡量不要用ip地址,否則后期遇到某個(gè)服務(wù)所在機(jī)器宕機(jī)要重新更換某1臺(tái)或多臺(tái)機(jī)器時(shí)會(huì)面臨證書認(rèn)證不通過的毀滅性尷尬情況,導(dǎo)致擴(kuò)容失敗,集群服務(wù)面臨毀滅性災(zāi)難。這里強(qiáng)烈推薦用域名或vip地址,另外,如果有條件,配置之處建議多預(yù)留1-3個(gè)host地址,防止后期擴(kuò)容困難
key字段說明:
key:key字段是必須有的字段,其內(nèi)容一般也比較固定就是:{"algo":"rsa”,"size":2048},表示使用的加密算法rsa,密文長度2048。:
names字段說明:?
C:(Country)所在國家簡稱,只能是國家字母縮寫,如中國:CNL:(Locality) 所在地區(qū)/城市簡稱,如Beijing/San FranciscoST:(State/Provice)所在州/省份簡稱,如Beijing/CaliforniaO:(Organization Name) 單位名稱,對(duì)于 SSL 證書,一般為網(wǎng)站域名;而對(duì)于代碼簽名證書則為申請(qǐng)單位名稱;而對(duì)于客戶端單位證書則為證書申請(qǐng)者所在單位名稱OU:(other)顯示其他內(nèi)容,常見的內(nèi)容值有“System"、"Website"等
2.2、genkey
# genkey命令
cfssl genkey -h
# genkey命令說明
cfssl genkey -- generate a new key and CSR
Usage of genkey:
cfssl genkey CSRJSON
Arguments:
CSRJSON: JSON file containing the request, use '-' for reading JSON from stdin
Flags:
-initca=false: initialise new CA
-config="": path to configuration file
csr.json文件:
{
"CN": "test",
"hosts": [
"example.com",
"www.example.com",
"https://www.example.com",
"jdoe@example.com",
"127.0.0.1"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "US",
"L": "San Francisco",
"O": "Internet Widgets, Inc.",
"OU": "WWW",
"ST": "California"
}
]
}
?2.2.1、生成證書簽名請(qǐng)求和私鑰
# 生成證書簽名請(qǐng)求和私鑰
cfssl genkey csr.json
# 顯示結(jié)果{"csr":"證書簽名請(qǐng)求","key":"私鑰"}
{"csr":"-----BEGIN CERTIFICATE REQUEST-----\nMIIDKDCCAhACAQAweDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWEx\nFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xHzAdBgNVBAoTFkludGVybmV0IFdpZGdl\ndHMsIEluYy4xDDAKBgNVBAsTA1dXVzENMAsGA1UEAxMEdGVzdDCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBALiGBaS3cwbvPiCMn7E4Gtv8RcwhNssoZG64\nF9sK0Zdg4nlBz6/MJg23cRAPPgxUfFXd/Ad1S3K1xiOOW/Ron7pY4MIAfBXDv4NZ\n2w+Vz4tAGVIW32178dkRzFh9DcYSK0bTkJoHqxJ0uPr5cUcB8EmDkqoi2k4pp6lL\nfNaHP/CMz/fcYUuFEhKGrwQjVUpudcFSGbEYExw9omjLTXPcv5ETCM+99ykq4M/g\nfrE8c1AOO9E7faOJ6DUzCoG1COL92wuQa8U4gqfQL944VodoW62nQLo0ldHbCerW\n1AuX2Jx/hRtproPo+MHOn71eiKm/uqZNHyzXJuW6/GX/tQvkjN8CAwEAAaBrMGkG\nCSqGSIb3DQEJDjFcMFowWAYDVR0RBFEwT4ILZXhhbXBsZS5jb22CD3d3dy5leGFt\ncGxlLmNvbYIXaHR0cHM6Ly93d3cuZXhhbXBsZS5jb22BEGpkb2VAZXhhbXBsZS5j\nb22HBH8AAAEwDQYJKoZIhvcNAQELBQADggEBAEW4O5auXbUPhjPiknlydWMINGJ3\nk6+/zq/9J7gBaTrRH/wSeXJrbekrww/1tkRCUFLCQgczWgcaKO34j0nWIsUOSIdl\nytpzVheiB3+WIot62N6rBOpiCSRXOs9KWA1cK7lz8UcBi1GdgeEekXZSd3LJswO6\nLCTwM1dJUxzNDBHrS/UwGINBteLnqIK4O9pJHG564u1ArMncErs0tSCH7zOPcQWp\n1zbw2rL1LMo/ej8SNyr5LdlZJ9fqI6DQi0etUYUVmt/ErM86/SpIlPTL2a6I6fFb\nJ/L3K0oCEL9LC/CNMB8ZxTLjoqSgoCwlr4V54amiel31ewly2rbNCqRItgc=\n-----END CERTIFICATE REQUEST-----\n","key":"-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEAuIYFpLdzBu8+IIyfsTga2/xFzCE2yyhkbrgX2wrRl2DieUHP\nr8wmDbdxEA8+DFR8Vd38B3VLcrXGI45b9GifuljgwgB8FcO/g1nbD5XPi0AZUhbf\nbXvx2RHMWH0NxhIrRtOQmgerEnS4+vlxRwHwSYOSqiLaTimnqUt81oc/8IzP99xh\nS4USEoavBCNVSm51wVIZsRgTHD2iaMtNc9y/kRMIz733KSrgz+B+sTxzUA470Tt9\no4noNTMKgbUI4v3bC5BrxTiCp9Av3jhWh2hbradAujSV0dsJ6tbUC5fYnH+FG2mu\ng+j4wc6fvV6Iqb+6pk0fLNcm5br8Zf+1C+SM3wIDAQABAoIBAHG03Mto5HAUg2NJ\nZKqvWRXQei5VFU/Rnzn/JWwsWYWABW8VV+cL1TNEpF5yFhlBArFjLohmBk00qFmG\nwzF0O2F4nV/PLqe2zVAi0fPjrFYx9Kh6QcpUw26xIgwxW4h/770gaA4SxZ+E3+yA\nRAausiSK+JjxCzd5QcD4LICCLauL/kFgIjNajTjGfjVmsDJDUF9Q5kUbcfnEj0+d\nTIG9k6XzkAgboS7o6dBK0BXDrWr2Btnzmbf0eJUXFVZkpYaHcwgqo988e8ubsoBb\niq33BDyH5+VGc/Vr5BwRoAxQOdx0JgISKMv09l0fD/DvIHivymIw5BYgn8c2/bOL\nLCDPn6kCgYEA1dp9cbXvMsG+2gEOwnTeQlrY7P3Wa5FcGtF3n6Z4ZF2D+SdwcdgO\nKPepwHe9yMYDnfQkj8eoAd6evgnAXyCqXCrFD9V83S3qj8Pdo8mw2hTcxfx6kYNX\ny5zpdgnEH6tYXr0qaGZs5WUv+q372lG8OfGfMGRrLpJVG3rTd/beDKMCgYEA3OPA\n2b5Qo/5Ejt8u7wJ/Q+wKWKx5vcWgl7KHqgfGB/+0X19OIKGcQQTa+J2dQCkfM1ZL\nYuegmtMavvQ5rrpNGJT7bwr+pjedB9cSbvr9zEkgw1cj/ZNSxak6tV130ZVr3864\nADBm2CYWyyUO26fz9yf9fdqNl7U8QEDta9uNJpUCgYB7nn19SeonsQ+d/ZaGmgAQ\n42saM/HK5JAVgJhh1V0qx1QOptm9NWOaEvAxrgYrFSvqFsM7yfI4gnPI7uIhG0Tf\nWmnnqUUwpeY9jL+GeoSczAqC+Fvx2bbaoK3j6elRVT8UJM1q5Cp2wHNnuUMpBK6F\n4EJhOusqVLSV2f58Dlx1eQKBgCC/UzP01xe49okH5XlhsWRsdgw3ZcUQq4JR4XL/\nvAgrjJ4nDvofe37YLW52T33XmtyNipebJ2BMs8Zjhrm0vQFL9Qq9YotZ61niNMVn\nSIEkxkqvfJJ3aOoM8Ls6pCzaLif8CaNdiaG5498yG0XNXInjz9z8rck0AT61YX2A\nCykRAoGAPbr3tp/XbRWDUvZNrK+lAhUEFjuFU9pBQFqBPTlFS45OrotE806QVrYi\n4vcYqvHbSypSecI10DEE7RbxIYaCr9pMqdPvlUkopp1mw5hmZprn5lE2Gz0Y/dv0\n+Aso0bCLAT7H7hx9/58h9y4IBbFOVop7g0wnZS/t18NqgO+PHE8=\n-----END RSA PRIVATE KEY-----\n"}
2.2.2、生成自簽名根 CA 證書和私鑰?
# 生成自簽名根 CA 證書和私鑰
cfssl genkey -initca csr.json | cfssljson -bare ca
# 查看文件列表
ls
# 顯示內(nèi)容,輸出中將出現(xiàn)三個(gè) PEM 編碼的實(shí)體:私鑰、csr 和自簽名證書
ca.csr ca-key.pem ca.pem csr.json
2.3、gencert
# 查看gencert命令
cfssl gencert -h
# gencert命令說明
cfssl gencert -- generate a new key and signed certificate
Usage of gencert:
Generate a new key and cert from CSR:
cfssl gencert -initca CSRJSON
cfssl gencert -ca cert -ca-key key [-config config] [-profile profile] [-hostname hostname] CSRJSON
cfssl gencert -remote remote_host [-config config] [-profile profile] [-label label] [-hostname hostname] CSRJSON
Re-generate a CA cert with the CA key and CSR:
cfssl gencert -initca -ca-key key CSRJSON
Re-generate a CA cert with the CA key and certificate:
cfssl gencert -renewca -ca cert -ca-key key
Arguments:
CSRJSON: JSON file containing the request, use '-' for reading JSON from stdin
Flags:
-initca=false: initialise new CA
-remote="": remote CFSSL server
-ca="": CA used to sign the new certificate
-ca-key="": CA private key
-config="": path to configuration file
-hostname="": Hostname for the cert, could be a comma-separated hostname list
-profile="": signing profile to use
-label="": key label to use in remote CFSSL server
利用CA根證書及其私鑰文件簽發(fā)生成其它證書及其私鑰
步驟如下:
創(chuàng)建CA根證書配置文件(ca-config.json、ca-csr.json)、目標(biāo)證書簽名請(qǐng)求文件(server-csr.json)生成CA根證書及其私鑰生成目標(biāo)證書和私鑰校驗(yàn)證書
詳見:手動(dòng)生成證書 | Kubernetes
2.3.1、創(chuàng)建文件
ca-config.json文件(用來生成 CA 文件):
CA根證書配置文件,一般命名為ca-config.json,它用于配置根證書的使用場(chǎng)景 (profile) 和具體參數(shù) (usage,過期時(shí)間、服務(wù)端認(rèn)證、客戶端認(rèn)證、加密等),后續(xù)在簽名其它證書時(shí)需要指定特定場(chǎng)景 (profile)。
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "8760h"
}
}
}
}
ca-csr.json文件(用于 CA 證書簽名請(qǐng)求):
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names":[{
"C": "
"ST": "
"L": "
"O": "
"OU": "
}]
}
server-csr.json文件(用來為 API 服務(wù)器生成秘鑰和證書):
{
"CN": "kubernetes",
"hosts": [
"127.0.0.1",
"
"
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [{
"C": "
"ST": "
"L": "
"O": "
"OU": "
}]
}
2.3.2、生成CA根證書及其私鑰
生成 CA 秘鑰文件(ca-key.pem)和證書文件(ca.pem)?
# 生成CA根證書及其私鑰
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
# 使用命令ls查看文件列表
ca.csr ca-csr.json ca-key.pem ca.pem
# 注意:cfssljson -bare + 命名文件名,
# 如本例中的ca,表示生成ca.pem和ca-key.pem,分別為證書和私鑰文件。
# 生成的ca.pem是CA根證書文件,ca-key.pem是其私鑰文件。
# 至此,CA根證書及其私鑰文件已經(jīng)生成,便可以用它們來簽發(fā)其他認(rèn)證文件了。
2.3.3、根據(jù)CA根證書及其私鑰簽名生成目標(biāo)證書和私鑰
生成秘鑰和證書,默認(rèn)會(huì)分別存儲(chǔ)為server-key.pem?和?server.pem?兩個(gè)文件。?
# 生成目標(biāo)證書和私鑰
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem \
--config=ca-config.json -profile=kubernetes \
server-csr.json | cfssljson -bare server
# 參數(shù)說明;
# -ca: 根證書
# -ca-key: 根秘鑰
# -config: 根證書的配置文件(里面定義了很多場(chǎng)景)
# -profile: 選擇根證書配置文件里的一個(gè)場(chǎng)景
# server-csr.json : 申請(qǐng)證書的對(duì)象的相關(guān)信息配置文件
# -bare:制造的證書文件的文件名稱(或前綴)
# 使用ls命令查看文件列表
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem server.csr server-csr.json server-key.pem server.pem
2.3.4、校驗(yàn)證書
# 方式1:使用openssl命令校驗(yàn)證書
openssl x509 -noout -text -in etcd.pem
# 說明:
# 確認(rèn)?Issuer?字段的內(nèi)容和?ca-csr.json?一致;
# 確認(rèn)?Subject?字段的內(nèi)容和?etcd-csr.json?一致;
# 確認(rèn)?X509v3 Subject Alternative Name?字段的內(nèi)容和?etcd-csr.json?一致;
# 確認(rèn)?X509v3 Key Usage、Extended Key Usage?字段的內(nèi)容和?ca-config.json?中?etcd-opprofile 一致;
# 方式2:使用cfssl-certinfo命令校驗(yàn)證書
cfssl-certinfo -cert ca.pem
詳見:
https://github.com/cloudflare/cfssl
Introducing CFSSL - CloudFlare's PKI toolkit
手動(dòng)生成證書 | Kubernetes
CloudFlare 開源證書管理工具 cfssl 詳細(xì)使用教程 - 知乎
cfssl自簽CA證書用于TLS/SSL認(rèn)證技術(shù)指南
cfssl使用方法重新整理說明-CSDN博客
我在B站學(xué)運(yùn)維之SSL與TLS協(xié)議原理與證書簽名多種生成方式實(shí)踐指南 - 嗶哩嗶哩
cfssl證書工具_(dá)Star-Seven的技術(shù)博客_51CTO博客
柚子快報(bào)激活碼778899分享:cfssl簡單使用
精彩內(nèi)容
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。