溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

openssl 創(chuàng)建 CA 詳細(xì)操作手冊(cè)

發(fā)布時(shí)間:2020-06-05 21:45:37 來(lái)源:網(wǎng)絡(luò) 閱讀:1685 作者:teinyou 欄目:安全技術(shù)


使用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)了。



向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI