1. 程式人生 > >openssl和cfssl證書籤名請求一點記錄

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