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