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