使用openssl生成双向加密证书(转)
要生成證書的目錄下建立幾個文件和文件夾,有
./demoCA/
./demoCA/newcerts/
./demoCA/private/
./demoCA/index.txt (空文件,生成證書時會將數(shù)據(jù)記錄寫入)
./demoCA/serial (在serial文件中寫入第一個序列號“01”,在生成證書時會以此遞增)
概念:首先要有一個根證書,然后用根證書來簽發(fā)用戶證書。
用戶進(jìn)行證書申請:一般先生成一個私鑰,然后用私鑰生成證書請求(證書請求里應(yīng)含有公鑰信息),再利用證書服務(wù)器的根證書來簽發(fā)證書。
特別說明:
(1)自簽名證書(一般用于頂級證書、根證書): 證書的名稱和認(rèn)證機(jī)構(gòu)的名稱相同.
(2)根證書:根證書是CA認(rèn)證中心給自己頒發(fā)的證書,是信任鏈的起始點(diǎn)。安裝根證書意味著對這個CA認(rèn)證中心的信任
數(shù)字證書則是由證書認(rèn)證機(jī)構(gòu)(CA)對證書申請者真實身份驗證之后,用CA的根證書對申請人的一些基本信息以及申請人的公鑰進(jìn)行簽名(相當(dāng)于加蓋發(fā)證書機(jī)構(gòu)的公章)后形成的一個數(shù)字文件。數(shù)字證書包含證書中所標(biāo)識的實體的公鑰(就是說你的證書里有你的公鑰),由于證書將公鑰與特定的個人匹配,并且該證書的真實性由頒發(fā)機(jī)構(gòu)保證(就是說可以讓大家相信你的證書是真的),因此,數(shù)字證書為如何找到用戶的公鑰并知道它是否有效這一問題提供了解決方案。
openssl中有如下后綴名的文件
.key格式:私有的密鑰
.csr格式:證書簽名請求(證書請求文件),含有公鑰信息,certificate signing request的縮寫
.crt格式:證書文件,certificate的縮寫
.crl格式:證書吊銷列表,Certificate Revocation List的縮寫
.pem格式:用于導(dǎo)出,導(dǎo)入證書時候的證書的格式,有證書開頭,結(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ù)其實格式也是PKCS#10的
PKCS#7: 是封裝數(shù)據(jù)的標(biāo)準(zhǔn),可以放置證書和一些請求信息
PKCS#10: 用于離線證書申請的證書申請的數(shù)據(jù)格式,注意數(shù)據(jù)包是使用PKCS#7封裝這個數(shù)據(jù)
PKCS#12: 用于一個單一文件中交換公共和私有對象,就是公鑰,私鑰和證書,這些信息進(jìn)行打包,加密放在存儲目錄中,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 -days 3650
$openssl rsa -in ca.key -out ca.key.unsecure -days 3650 //生成一個不需要口令保護(hù)的私鑰,不推薦,可以于去除密碼
* 對已生成csr請求的證書進(jìn)行自簽名的無交互全自動命令:
$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 2048
[無交互全自動:$openssl genrsa -des3 -passout pass:111111 -out server.key 2048]
$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 2048
[無交互全自動:$openssl genrsa -des3 -passout pass:111111 -out client.key 2048]
$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 -days 3650
$openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -days 3650
[無交互全自動:$openssl ca -key 999999 -in client.csr -out client.crt -config conf\openssl.cnf -batch]
(說明:ca私鑰及證書位置在conf\openssl.cnf中指定,設(shè)置好了可不帶-config參數(shù),-key為ca私鑰密碼,-in為待簽名證書申請文件,-out為輸出證書文件,-batch表示輸出無需人工干預(yù),注意一個證書不可被簽名多次,因為index文件中有記錄,在此生成的.crt也可換成其它如.pem格式證書)
*進(jìn)行CA簽名獲取證書時,需要注意國家、省、單位需要與CA證書相同,否則會報:
The countryName field needed to be the same in the CA certificate (cn) and the request (sh)
*進(jìn)行CA簽名獲取證書時,如果信息完全和已有證書信息相同會報錯,即不能生成相同的證書,報錯信息為:
failed to update database
TXT_DB error number 2
*在進(jìn)行CA簽名獲取證書時,可對證書的有效起止時間作控制,默認(rèn)有效期是一年,可用-days 3650這樣的方式改為10年,如想更精確控制,可使用-startdate 和-enddate參數(shù),如-startdate 120501000000Z -enddate 120601000000Z,日期格式為yyMMddHHmmssZ,分別表示年,月,日,時, 分,秒. 其中”Z”是遺留自初始的UTCTIME. 如果沒有”Z”,就允許兩種附加組”[+/-]hh ‘mm’”,其中”hh”和”mm”分別為與GMT的時差和分差. 如果有”Z”,則時間是以Zulu或GMT時間表示.注:如出現(xiàn):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 為欲轉(zhuǎn)換為p12文件的證書文件,-inkey為與轉(zhuǎn)換為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文件轉(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 //查看私鑰
==============NGINX相關(guān)配置==============
listen 443 ssl;
ssl_password_file cert/server.pwd; #啟動密碼
ssl_certificate cert/server.crt;
ssl_certificate_key cert/server.key;
ssl_client_certificate cert/ca.crt;
ssl_verify_client on;
ssl_session_cache shared:SSL:30m;
ssl_session_timeout 30m;
#ssl_protocols SSLv3 TLSv1.2 TLSv1.1 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
轉(zhuǎn)載地址:https://www.chnhacker.com/2017/03/17/%E4%BD%BF%E7%94%A8openssl%E7%94%9F%E6%88%90%E5%8F%8C%E5%90%91%E5%8A%A0%E5%AF%86%E8%AF%81%E4%B9%A6/
轉(zhuǎn)載于:https://www.cnblogs.com/yinliang/p/10334449.html
總結(jié)
以上是生活随笔為你收集整理的使用openssl生成双向加密证书(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LuoguP2292 L语言
- 下一篇: python测试testsuite使用命