您好,登錄后才能下訂單哦!
使用Openssl創(chuàng)建私有CA中心的整體步驟:
1、生成root ca,再根據(jù)roo.ca生成intermediate CAs,最佳實(shí)踐是,不要讓root.ca直接去簽名,而是讓intermediate CAs 去簽名,生成root.ca的機(jī)器最好isolated,以免私鑰丟失。
1.1、準(zhǔn)備root證書(shū)放的地兒專(zhuān)門(mén)保存私鑰和證書(shū)
mkdir /root/ca
cd /root/ca
mkdir certs crl newcerts private
chmod 700 private
touch index.txt
echo 1000 > serial
index.txt and serial files 用于記錄證書(shū)簽名的跟蹤.
1.2、必須使用一個(gè)配置文件給openssl來(lái)使用,保存的名字位于/root/ca/openssl.cnf,附:https://jamielinux.com/docs/openssl-certificate-authority/appendix/root-configuration-file.html
1.3、創(chuàng)建root CA的私鑰key, 使用aes256加密key文件,私鑰文件為4096位。
# cd /root/ca
# openssl genrsa -aes256 -out private/ca.key.pem 4096
-------會(huì)提示讓你輸密碼-------
# chmod 400 private/ca.key.pem
1.4、創(chuàng)建root CA的公鑰certificate,使用私鑰去生成公鑰,失效日期設(shè)置長(zhǎng)一點(diǎn)(eg:20 years)
# cd /root/ca
# openssl req -config openssl.cnf \
-key private/ca.key.pem \
-new -x509 -days 7300 -sha256 -extensions v3_ca \
-out certs/ca.cert.pem
------會(huì)提示你輸入相關(guān)信息--------
# chmod 444 certs/ca.cert.pem
使用-config來(lái)指定我們之前下載的配置模板,否則將使用默認(rèn)的模板,位于/etc/pki/tls/openssl.cnf
1.5、校驗(yàn)生成的公鑰是否是我們想要的
#openssl x509 -noout -text -in certs/ca.cert.pem
2、生成intermediate pairs,intermediate CA可以代表root CA去給第三方做簽名,root CA簽名intermediate CA, 結(jié)果會(huì)形成一個(gè)信任鏈chain of trust
2.1、準(zhǔn)備目錄
# mkdir /root/ca/intermediate
# cd /root/ca/intermediate
# mkdir certs crl csr newcerts private
# chmod 700 private
# touch index.txt
# echo 1000 > serial
相比root ca多了一個(gè)csr目錄,主要用于保存證書(shū)簽名請(qǐng)求。
# echo 1000 > /root/ca/intermediate/crlnumber
創(chuàng)建一個(gè)crlnumber文件,主要用于證書(shū)吊銷(xiāo)列表的追蹤。
2.2、準(zhǔn)備配置文件為/root/ca/intermediate/openssl.cnf, 配置文件模板為https://jamielinux.com/docs/openssl-certificate-authority/appendix/intermediate-configuration-file.html
主要有五個(gè)選項(xiàng)需要變一下:
[ CA_default ]
dir = /root/ca/intermediate
private_key = $dir/private/intermediate.key.pem
certificate = $dir/certs/intermediate.cert.pem
crl = $dir/crl/intermediate.crl.pem
policy = policy_loose
root.ca中的policy是policy_strict是指它只簽名intermediate,而intermediate是loose是允許他去簽名更多的其他證書(shū)。
2.3、創(chuàng)建intermediate私鑰,和root ca一樣的命令
# cd /root/ca
# openssl genrsa -aes256 \
-out intermediate/private/intermediate.key.pem 4096
-----提示輸入保護(hù)密碼----
# chmod 400 intermediate/private/intermediate.key.pem
2.4、使用intermediate 私鑰去創(chuàng)建一個(gè)certificate signing request (CSR)
# cd /root/ca
# openssl req -config intermediate/openssl.cnf -new -sha256 \
-key intermediate/private/intermediate.key.pem \
-out intermediate/csr/intermediate.csr.pem
---------會(huì)輸出很多讓你輸入的信息,除了Common Name和root ca時(shí)不一樣,其他最好保持一致----------
注意以上使用的是intermediate的配置文件,以下則是使用root ca 的配置文件,with v3_intermediate_ca extension去簽名以上生成的CSR,并生成簽名后的intermediate公鑰證書(shū):
# cd /root/ca
# openssl ca -config openssl.cnf -extensions v3_intermediate_ca \
-days 3650 -notext -md sha256 \
-in intermediate/csr/intermediate.csr.pem \
-out intermediate/certs/intermediate.cert.pem
# chmod 444 intermediate/certs/intermediate.cert.pem
以上命令完后,會(huì)在運(yùn)行openssl ca命令時(shí)的目錄(/root/ca)下的index.txt下生成類(lèi)似以下信息,不要?jiǎng)h除:V 250408122707Z 1000 unknown ... /CN=Alice Ltd Intermediate CA
2.5、驗(yàn)證intermediate證書(shū)的細(xì)節(jié)是否正確:
# openssl x509 -noout -text \
-in intermediate/certs/intermediate.cert.pem
然后再驗(yàn)證intermediate證書(shū)的是否被root ca正確簽名:
# openssl verify -CAfile certs/ca.cert.pem \
intermediate/certs/intermediate.cert.pem
2.6、創(chuàng)建一個(gè)證書(shū)鏈文件,主要用于一個(gè)應(yīng)用程序,例如瀏覽器要認(rèn)證intermediate證書(shū)的有效簽發(fā)機(jī)構(gòu)是不是root ca(假設(shè)瀏覽器信任root ca)
# cat intermediate/certs/intermediate.cert.pem \
certs/ca.cert.pem > intermediate/certs/ca-chain.cert.pem
# chmod 444 intermediate/certs/ca-chain.cert.pem
證書(shū)鏈文件必須包含root ca的certification,并且在每臺(tái)內(nèi)部客戶端安裝root公鑰證書(shū).
3、利用intermediate CA去簽名平時(shí)使用的server和client,如果是第三方給你的話,人家只需要給你CSR即可,你給CSR簽名就行了。以下是從自己內(nèi)部的角度來(lái)一步一步操作。
3.1、在server端創(chuàng)建key私鑰,盡管root 和 intermediate pair是4096bit,但是給server和client簽名時(shí)最好是2048bit,減少TLS握手時(shí)性能壓力。
# cd /root/ca
# openssl genrsa -aes256 \
-out intermediate/private/www.example.com.key.pem 2048
# chmod 400 intermediate/private/www.example.com.key.pem
如果使用apache,每次啟動(dòng)都要輸入保護(hù)私鑰的密碼,如果不想輸入密碼,就去掉-aes256。
3.2、使用key私鑰去生成一個(gè)CSR證書(shū)(說(shuō)白了就是未簽名的公鑰證書(shū)),
# cd /root/ca
# openssl req -config intermediate/openssl.cnf \(使用intermediate的私鑰去生成server的公鑰?錯(cuò)了吧,也許這里面的intermediate相當(dāng)于第三方自己的內(nèi)部CA,pending....)
-key intermediate/private/www.example.com.key.pem \
-new -sha256 -out intermediate/csr/www.example.com.csr.pem
----輸出一堆信息讓你填,你不需要和intermediate的相對(duì)應(yīng),但common name時(shí)填寫(xiě)網(wǎng)站全名,如果是client的話,最好填郵箱信息-----
3.3、使用intermediate證書(shū)去簽名server或client的CSR并生成簽名后證書(shū),證書(shū)通常一年
# cd /root/ca
# openssl ca -config intermediate/openssl.cnf \
-extensions server_cert -days 375 -notext -md sha256 \
-in intermediate/csr/www.example.com.csr.pem \
-out intermediate/certs/www.example.com.cert.pem
# chmod 444 intermediate/certs/www.example.com.cert.pem
如果是去簽名一個(gè)client,則改成-extensions usr_cert
最后會(huì)在intermediate/index.txt文件中生成一條類(lèi)似于如下信息: V 160420124233Z 1000 unknown ... /CN=www.example.com
3.4、校驗(yàn)生成的證書(shū)信息是否正確
# openssl x509 -noout -text \
-in intermediate/certs/www.example.com.cert.pem
3.5、使用之前intermediate時(shí)創(chuàng)建的證書(shū)鏈文件校驗(yàn)是否ok
# openssl verify -CAfile intermediate/certs/ca-chain.cert.pem \
intermediate/certs/www.example.com.cert.pem
3.6、部署證書(shū),這里假設(shè)是apache,以下文件需要
ca-chain.cert.pem
www.example.com.key.pem
www.example.com.cert.pem
如果是給第三方做簽名的話,只需要給他們ca-chain.cert.pem和
www.example.com.cert.pem,因?yàn)樗麄冏屇阕龊灻麜r(shí),不會(huì)把私鑰給你的。
4、證書(shū)撤消列表CRLs,主要用來(lái)客戶端程序(eg: IE)使用CRL去驗(yàn)證一個(gè)證書(shū)是否被撤消,服務(wù)器也可以使用CRLs限制擁有無(wú)效證書(shū)的客戶端連接。目前CRLs這種方式已經(jīng)被Online Certificate Status Protocol (OCSP)取代,所以這里喜新不喜舊。
OCSP server address 通常會(huì)在證書(shū)里面指定。
4.1、OCSP準(zhǔn)備配置文件,在intermediate CA的配置文件中指定,因?yàn)橐褂胕ntermediate CA做簽名
[ server_cert ]
# ... snipped ...
authorityInfoAccess = OCSP;URI:http://ocsp.example.com
4.2、創(chuàng)建OCSP密鑰對(duì),OCSP responder需要使用該密鑰對(duì)加密回復(fù)requesting party, 必須使用證書(shū)的擁有者相同的CA簽名
生成私鑰:
# cd /root/ca
# openssl genrsa -aes256 \
-out intermediate/private/ocsp.example.com.key.pem 4096
根據(jù)私鑰生成CSR:
# cd /root/ca
# openssl req -config intermediate/openssl.cnf -new -sha256 \
-key intermediate/private/ocsp.example.com.key.pem \
-out intermediate/csr/ocsp.example.com.csr.pem
-----輸出很多信息需要填,最好和要使用的簽名CA時(shí)的信息一樣,Common name是全域名------
使用intermediate CA去簽名該CSR:
# openssl ca -config intermediate/openssl.cnf \
-extensions ocsp -days 375 -notext -md sha256 \
-in intermediate/csr/ocsp.example.com.csr.pem \
-out intermediate/certs/ocsp.example.com.cert.pem
驗(yàn)證生成的證書(shū)含有正確的x509 v3 extension:
# openssl x509 -noout -text \
-in intermediate/certs/ocsp.example.com.cert.pem
4.2、撤消證書(shū),本次測(cè)試環(huán)境中使用openssl的ocsp工具作為ocsp responder,在生產(chǎn)環(huán)境需要商業(yè)版。
建立一個(gè)server的證書(shū)去測(cè)試
# cd /root/ca
# openssl genrsa -out intermediate/private/test.example.com.key.pem 2048
# openssl req -config intermediate/openssl.cnf \(又出現(xiàn)了,為什么生成server證書(shū)還要intermediate配置文件?沒(méi)谷歌到)
-key intermediate/private/test.example.com.key.pem \
-new -sha256 -out intermediate/csr/test.example.com.csr.pem
# openssl ca -config intermediate/openssl.cnf \
-extensions server_cert -days 375 -notext -md sha256 \
-in intermediate/csr/test.example.com.csr.pem \
-out intermediate/certs/test.example.com.cert.pem
在本地運(yùn)行OCSP responder,通常是和intermediate ca在一起(因?yàn)樗褂盟呐渲梦募?,the OCSP responder reads index.txt directly,回復(fù)的消息也會(huì)使用OCSP cryptographic pair (using the -rkey and -rsigner options):
# openssl ocsp -port 127.0.0.1:2560 -text -sha256 \
-index intermediate/index.txt \
-CA intermediate/certs/ca-chain.cert.pem \
-rkey intermediate/private/ocsp.example.com.key.pem \
-rsigner intermediate/certs/ocsp.example.com.cert.pem \
-nrequest 1
在另一個(gè)窗口,向OCSP發(fā)送requery包,使用-cert指定證書(shū)來(lái)發(fā)送:
# openssl ocsp -CAfile intermediate/certs/ca-chain.cert.pem \
-url http://127.0.0.1:2560 -resp_text \
-issuer intermediate/certs/intermediate.cert.pem \
-cert intermediate/certs/test.example.com.cert.pem
------會(huì)有很多輸出信息,OCSP Response Status表示發(fā)回來(lái)的狀態(tài),Responder Id是指responder的身份,Cert Status表示撤消狀態(tài)。-------
撤消證書(shū)動(dòng)作,誰(shuí)簽發(fā)誰(shuí)撤消:
# openssl ca -config intermediate/openssl.cnf \
-revoke intermediate/certs/test.example.com.cert.pem
然后再請(qǐng)求一次,就可以看到撤消的狀態(tài)了。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。