要生成證書的目錄下建立幾個文件和文件夾,有
./demoCA/ ./demoCA/newcerts/ ./demoCA/private/ ./demoCA/index.txt (空文件,生成證書時會將數據記錄寫入) ./demoCA/serial (在serial文件中寫入第一個序列號“01”,在生成證書時會以此遞增)
概念:首先要有一個根證書,然后用根證書來簽發用戶證書。
用戶進行證書申請:一般先生成一個私鑰,然后用私鑰生成證書請求(證書請求里應含有公鑰信息),再利用證書服務器的根證書來簽發證書。
特別說明:
(1)自簽名證書(一般用于頂級證書、根證書): 證書的名稱和認證機構的名稱相同.
(2)根證書:根證書是CA認證中心給自己頒發的證書,是信任鏈的起始點。安裝根證書意味著對這個CA認證中心的信任
數字證書則是由證書認證機構(CA)對證書申請者真實身份驗證之后,用CA的根證書對申請人的一些基本信息以及申請人的公鑰進行簽名(相當于加蓋發證書機構的公章)后形成的一個數字文件。數字證書包含證書中所標識的實體的公鑰(就是說你的證書里有你的公鑰),由于證書將公鑰與特定的個人匹配,并且該證書的真實性由頒發機構保證(就是說可以讓大家相信你的證書是真的),因此,數字證書為如何找到用戶的公鑰并知道它是否有效這一問題提供了解決方案。
openssl中有如下后綴名的文件
.key格式:私有的密鑰
.csr格式:證書簽名請求(證書請求文件),含有公鑰信息,certificate signing request的縮寫
.crt格式:證書文件,certificate的縮寫
.crl格式:證書吊銷列表,Certificate Revocation List的縮寫
.pem格式:用于導出,導入證書時候的證書的格式,有證書開頭,結尾的格式
常用證書協議
x509v3: IETF的證書標準
x.500:目錄的標準
SCEP: 簡單證書申請協議,用http來進行申請,數據有PKCS#7封裝,數據其實格式也是PKCS#10的
PKCS#7: 是封裝數據的標準,可以放置證書和一些請求信息
PKCS#10: 用于離線證書申請的證書申請的數據格式,注意數據包是使用PKCS#7封裝這個數據
PKCS#12: 用于一個單一文件中交換公共和私有對象,就是公鑰,私鑰和證書,這些信息進行打包,加密放在存儲目錄中,CISCO放在NVRAM中,用戶可以導出,以防證書服務器掛掉可以進行相應恢復。思科是.p12,微軟是.pfx
再說步驟:
生成CA私鑰--》生成CA證書請求--》自簽名得到根證書(CA給自已頒發的證書)
生成私鑰--》生成證書請求--》通過CA簽名得到證書
----------------------------------------------------------------------------------------
1.生成X509格式的CA自簽名證書
$openssl req -new -x509 -keyout ca.key -out ca.crt $openssl rsa -in ca.key -out ca.key.unsecure //生成一個不需要口令保護的私鑰,不推薦,可以于去除密碼 * 對已生成csr請求的證書進行自簽名的無交互全自動命令: $openssl -x509 -req -in csr/ca.csr -out newcerts/ca-cert.pem -signkey private/ca-key.pem -passin pass:999999 -days 3650
2.生成服務端的私鑰(key文件)及csr 文件
$openssl genrsa -des3 -out server.key 1024 [無交互全自動:$openssl genrsa -des3 -passout pass:111111 -out server.key 1024] $openssl req -new -key server.key -out server.csr [無交互全自動:$openssl req -new -passin pass:111111 -key server.key -out server.csr -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=atco company/OU=IT/CN=it.atco.com/emailAddress=atco@163.com"]
3.生成客戶端的私鑰(key文件)及csr文件
$openssl genrsa -des3 -out client.key 1024 [無交互全自動:$openssl genrsa -des3 -passout pass:111111 -out client.key 1024] $openssl req -new -key client.key -out client.csr [無交互全自動:$openssl req -new -passin pass:111111 -key client.key -out client.csr -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=atco company/OU=IT/CN=it.atco.com/emailAddress=atco@163.com"]
4.用生成的CA的證書為剛才生成的server.csr,client.csr文件簽名
$openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key $openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key [無交互全自動:$openssl ca -key 999999 -in client.csr -out client.crt -config confopenssl.cnf -batch]
(說明:ca私鑰及證書位置在confopenssl.cnf中指定,設置好了可不帶-config參數,-key為ca私鑰密碼,-in為待簽名證書申請文件,-out為輸出證書文件,-batch表示輸出無需人工干預,注意一個證書不可被簽名多次,因為index文件中有記錄,在此生成的.crt也可換成其它如.pem格式證書)
*進行CA簽名獲取證書時,需要注意國家、省、單位需要與CA證書相同,否則會報:
The countryName field needed to be the same in the CA certificate (cn) and the request (sh)
*進行CA簽名獲取證書時,如果信息完全和已有證書信息相同會報錯,即不能生成相同的證書,報錯信息為:
failed to update database
TXT_DB error number 2
*在進行CA簽名獲取證書時,可對證書的有效起止時間作控制,默認有效期是一年,可用-days 3650這樣的方式改為10年,如想更精確控制,可使用-startdate 和-enddate參數,如-startdate 120501000000Z -enddate 120601000000Z,日期格式為yyMMddHHmmssZ,分別表示年,月,日,時, 分,秒. 其中"Z"是遺留自初始的UTCTIME. 如果沒有"Z",就允許兩種附加組"[+/-]hh 'mm'",其中"hh"和"mm"分別為與GMT的時差和分差. 如果有"Z",則時間是以Zulu或GMT時間表示.注:如出現:unable to access the ./demoCA/newcerts directory
這時可找到配置文件,一般是openssl.cnf,修改配置文件項為你生成證書的路徑
[ CA_default ]
dir = C:\OpenSSL\bin\demoCA (原值是:./demoCA,注意路徑用雙斜杠)
5. 生成p12格式證書 (思科是.p12,微軟是.pfx)
$openssl pkcs12 -export -inkey client.key -in client.crt -out client.pfx $openssl pkcs12 -export -inkey server.key -in server.crt -out server.pfx [無交互全自動:$openssl pkcs12 -export -clcerts -in client.pem -inkey client.key -passin pass:111111 -out client.p12 -passout pass:111111]
說明:-in 為欲轉換為p12文件的證書文件,-inkey為與轉換為p12文件的證書私鑰文件,-passin 為私鑰文件密碼,-out為p12文件,-passout為p12文件打開密碼
6.生成pem格式證書
有時需要用到pem格式的證書,可以用以下方式合并證書文件(crt)和私鑰文件(key)來生成
$cat client.crt client.key> client.pem $cat server.crt server.key > server.pem
7.PFX文件轉換為X509證書文件和RSA密鑰文件
$openssl pkcs12 -in server.pfx -nodes -out server.pem $openssl rsa -in server.pem -out server2.key $openssl x509 -in server.pem -out server2.crt
8. 其他相關命令
$openssl rsa -noout -text -in ca.key //查看私鑰
生成
服務端證書:ca.crt, server.key, server.crt, server.pem, server.pfx
客戶端證書:ca.crt, client.key, client.crt, client.pem, client.pfx