openssl和cfssl證書籤名請求一點記錄
基本概念:
X509 證書標準,定義證書內容
openssl:一套開源軟體,SSL密碼庫工具,提供了一個通用、健壯、功能完備的工具套件,用以支援SSL/TLS 協議的實現。
CFSSL: CFSSL是CloudFlare的PKI / TLS瑞士×××。它既是命令列工具,也是用於簽名,驗證和捆綁TLS證書的HTTP API伺服器.
編碼格式:PEM DER
PEM - Privacy Enhanced Mail,開啟看文字格式,以"-----BEGIN..."開頭, "-----END..."結尾,內容是BASE64編碼.
檢視PEM格式證書的資訊:openssl x509 -in certificate.pem -text -noout
Apache和*NIX伺服器偏向於使用這種編碼格式.
DER - Distinguished Encoding Rules,開啟看是二進位制格式,不可讀.
檢視DER格式證書的資訊:openssl x509 -in certificate.der -inform der -text -noout
Java和Windows伺服器偏向於使用這種編碼格式.
副檔名:
CRT應該是certificate的三個字母,其實還是證書的意思,常見於*NIX系統,有可能是PEM編碼,也有可能是DER編碼,大多數應該是PEM編碼。
CER 還是certificate,還是證書,常見於Windows系統,同樣的,可能是PEM編碼,也可能是DER編碼,大多數應該是DER編碼.
KEY 通常用來存放一個公鑰或者私鑰,並非X.509證書,編碼同樣的,可能是PEM,也可能是DER.
檢視KEY的辦法:openssl rsa -in mykey.key -text -noout
CSR - Certificate Signing Request,即證書籤名請求,這個並不是證書,而是向權威證書頒發機構獲得簽名證書的申請,其核心內容是一個公鑰(當然還附帶了一些別的資訊),在生成這個申請的時候,同時也會生成一個私鑰,私鑰要自己保管好。
PFX/P12:predecessor of PKCS#12,常用語windows IIS。
JKS - 即Java Key Storage,這是Java的專利
證書轉換:
PEM轉為DER openssl x509 -in cert.crt -outform der -out cert.der
DER轉為PEM openssl x509 -in cert.crt -inform der -outform pem -out cert.pem
1.openssl建立私鑰,公鑰,證書,簽名請求,認證。
1.1建立私鑰:
openssl genrsa -out rsa_private.key 2048 #建立2048位私鑰
1.2生成公鑰:
openssl rsa -in rsa_private.key -pubout -out rsa_public.key
1.3生成自簽證書(#建立私鑰的同時建立自簽證書,兩者合二為一)
openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 365 -out cert.crt
# -newkey 生成私鑰 rsa:2048 生成2048位祕鑰 -node 不加密證書 -x509生成證書 -days 生效時間 -out產生證書
"/C=CN
/ST=GD
/L=SZ
/O=example
/OU=dev
/CN=example.com #本機名稱
/emailAddress=example.com"
或者自動輸入資訊
openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 365 -out cert.crt -subj "/C=CN/ST=GD/L=SZ/O=example/OU=dev/CN=example.com"
1.4客戶端生成簽名請求
openssl genrsa -aes256 -out server.key 2048 #生成私鑰
openssl req -new -key server.key -passin pass:111111 -out server.csr -subj "/C=CN/ST=GD/L=SZ/O=example/OU=dev/CN=主機名至關重要"
1.5證書籤發:
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
1.6自建證書信任問題
On Ubuntu:
cp yourdomain.com.crt /usr/local/share/ca-certificates/yourdomain.com.crt
update-ca-certificates
On Red Hat (CentOS etc):
cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/yourdomain.com.crt
update-ca-trust
2.CSFFL建立證書
1. 下載安裝cfssl,cfssl-certinfo,cfssljson
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 /usr/local/bin/cfssljson
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssl-certinfo /usr/local/bin/cfssljson
2 cfssl 工具解釋
sign 簽發證書
bundle 建立包含客戶端證書的證書包
genkey 生成私鑰和證書請求
gencert 生成私鑰和證書
serve 啟動證書伺服器
version 列印版本
selfsign 生成自簽證書
print-defaults 列出預設命令
3.生成CA證書和私鑰
vim ca-csj.json
{
"CN": "example.com", #瀏覽器驗證該欄位是否合法,一般寫域名,非常重要.
"names": [
{
"C": "US",
"L": "San Francisco",
"O": "Internet Widgets, Inc.",
"OU": "WWW",
"ST": "California"
}
]
}
4.生成自簽證書CA證書和CA私鑰和CSR(證書籤名請求)
cfssl gencert -initca ca-csr.json | cfssljson -bare ca ## 初始化ca
生成 ca.csr,ca-key.pem,ca.pem
5.生成證書籤名請求和私鑰
客戶端私鑰json檔案格式如下:
{
“ hosts ”:[ #相當於上次所說的擴充套件認證,即一個證書的網站可以是*.youku.com也是可以是*.google.com
“ example.com ”,
“ www.example.com ”
]
“ key ”:{
“ algo ”: “ rsa ”,
“ size ”: 2048
},
“名字”:[
{
“ C ”: “ US ”,
“ L ”: “ San Francisco ”,
“ O ”: “ Internet Widgets,Inc。”,
“ OU ”: “ WWW ”,
“ ST ”: “ California ”
}
]
}
cfssl genkey csr.json
6.生成本地頒發的證書和私鑰
cfssl gencert -ca cert -ca-key key [-hostname=comma,separated,hostnames] csr.json #[hostname 理解同上]
最後全文僅供參考,後續有誤的地方,我會更正。
文件參考:
http://blog.sina.com.cn/s/blog_3d5517850102w2rs.html
https://blog.csdn.net/gengxiaoming7/article/details/78505107
https://github.com/cloudflare/cfssl
http://blog.51cto.com/liuzhengwei521/2120535