CFSSL是CloudFlare開源的一款PKI/TLS工具,CFSSL包含一個命令行工具和一個用於簽名,驗證並且捆綁TLS證書的HTTP API服務,環境構建方面需要 Go 1.12+。
安裝一些實用的命令行工具,其中包括 cfssl、cfssljson。cfssljson 程序,從 cfssl 獲取 JSON 輸出,並將證書、密鑰、CSR和 bundle 寫入指定位置。
# 生成默認CA配置json配置文件
# ca-config.json:可以定義多個 profiles,分別指定不同的過期時間、使用場景等參數;後續在簽名證書時使用某個 profile
$ sudo cfssl print-defaults config > ca-config.json
$ sudo cfssl print-defaults csr > ca-csr.json
[root@ho cfssl]# cfssl print-defaults config
{
"signing": { # 表示該證書可用於簽名其它證書;生成的 ca.pem 證書中 CA=TRUE
"default": {
"expiry": "168h"
},
"profiles": {
"www": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"server auth" # 表示client可以用該 CA 對server提供的證書進行驗證
]
},
"client": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"client auth" # 表示server可以用該CA對client提供的證書進行驗證
]
}
}
}
}
[root@ho cfssl]# cfssl print-defaults csr
{
"CN": "example.net", # Common Name,從證書中提取該字段作爲請求的用戶名 (User Name),瀏覽器使用該字段驗證網站是否合法
"hosts": [ # 如果 hosts 字段不爲空則需要指定授權使用該證書的 IP 或域名列表
"example.net",
"www.example.net"
],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"C": "US",
"ST": "CA",
"L": "San Francisco",
"O": "Client-CA", # Organization,從證書中提取該字段作爲請求用戶所屬的組 (Group)
"OU": "System"
}
]
}
# 生產CA證書和私鑰
# 根證書文件: ca.pem
# 根證書私鑰: ca-key.pem
# 根證書申請文件: ca.csr
$ cfssl gencert -initca ca-csr.json | cfssljson -bare ca