本文借助實驗環境下創建的root CA私鑰和證書進一步創建中間CA。為了便於區分,我們將創建中間CA(intermediate CA)的CA稱為根CA(root CA)。
中間CA是root CA的代理,其證書由root CA簽發,同時中間CA能夠代表根CA簽發用戶證書,由此建立起信任鏈。
創建中間CA的好處是即使中間CA的私鑰泄露,造成的影響也是可控的,我們只需要使用root CA撤銷對應中間CA的證書即可。此外root CA的私鑰可以脫機妥善保存,只需要在撤銷和更新中間CA證書時才會使用。
我們基於已經創建的root CA創建自己的中間CA,與前文保持一致,假定證書根目錄為/etc/pki/CA/目錄,將中間CA的證書相關信息存放在自己的目錄中,為了體現信任鏈的傳遞邏輯,在/etc/pki/CA/下創建對應目錄即可,這里假設中間CA的證書目錄是/etc/pki/CA/intermediate/。
初始化證書目錄的過程與創建root CA時並無二致:
# mkdir /etc/pki/CA/intermediate # cd /etc/pki/CA/intermediate # mkdir certs crl newcerts private # chmod 700 private # touch index.txt # echo 1000 > serial
接下來創建中間CA的私鑰,采用AES-256算法加密中間CA的私鑰,中途會讓我們輸入加密密鑰,最后修改中間CA的私鑰訪問權限:
# cd /etc/pki/CA # openssl genrsa -aes256 -out \ intermediate/private/intermediate.key.pem 4096
Enter pass phrase for intermediate.key.pem: SECRET
Verifying - Enter pass phrase for intermediate.key.pem: SECRET
# chmod 400 intermediate/private/intermediate.key.pem
中間CA要向root CA申請公鑰證書,就要首先產生一個CSR(證書簽名請求,Certificate Signing Request都有作用)格式的請求文件,將其發送給root CA后等待其對中間CA的審查。
將創建root CA時使用的配置文件拷貝到中間CA證書目錄下,該配置文件在生成CSR文件和后續簽發用戶證書時都有用。
創建並編輯intermediate_CA.cnf:
# cp /etc/pki/CA/root_CA.cnf \
/etc/pki/CA/intermediate/intermediate_CA.cnf
# cd /etc/pki/CA/intermediate
# vim intermediate_CA.cnf
...
[ CA_default ]
dir = /etc/pki/CA/intermediate
certs = $dir/certs
private = $dir/private
certificate = $certs/intermediate.cert.pem
private_key = $private/intermediate.key.pem
今后我們每次使用中間CA創建新的證書時,以”-config /etc/pki/CA/intermediate/intermediate_CA.cnf“ 的形式告訴OpenSSL中間CA的信息。
intermediate_CA.cnf默認申請的有效期是365天,如果想要修改這個時長,可以在[ CA_default ]的"default_days"字段進行修改。
接下來就可以生成CSR文件了:
# cd /etc/pki/CA/intermediate # openssl req -config intermediate_CA.cnf \ -sha256 -new -key private/intermediate.key.pem \ -out certs/intermediate.csr.pem
隨后系統會要求我們輸入中間CA的私鑰密碼,設置中間CA的一些身份信息等等,注意”Organization Name“一項一定要與root CA時設置的相同。
正確輸入中間CA的身份信息后我們就得到了中間CA的CSR。
接下來我們用root CA同意中間CA的請求,因為我們將使用root CA的私鑰簽名中間CA的證書,這時系統會要求我們輸入root CA的私鑰密碼,選擇簽名證書如下:
# cd /etc/pki/CA # openssl ca \ -config root_CA.cnf \-extensions v3_ca -notext -md sha256 \ -in intermediate/certs/intermediate.csr.pem \ -out intermediate/certs/intermediate.cert.pem
Using configuration from root_CA.cnf
Enter pass phrase for /etc/pki/CA/private/ca.key.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
...
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
# chmod 444 intermediate/certs/intermediate.cert.pem
到此我們已經為中間CA生成了公鑰證書,下面我們可以驗證一下該證書的真實性:
# openssl verify -CAfile /etc/pki/CA/certs/ca.cert.pem \ /etc/pki/CA/intermediate/certs/intermediate.cert.pem
/etc/pki/CA/intermediate/certs/intermediate.cert.pem: OK
系統顯示"OK",說明我們頒發給中間CA的證書是有效的。
至此我們可以采取類似中間CA獲得證書的方式為普通客戶頒發證書了,只不過這時我們以中間CA的身份進行。由於中間CA的證書也是經過上一級CA認證的,所以以后驗證用戶證書時必須將完整的CA證書鏈提供給OpenSSL。
所以我們的工作還沒有完成,接下來就構造這樣的CA證書鏈,事實上非常簡單,將root CA的證書追加到中間CA證書后即可。生產環境下各級CA的證書都是公開的,因此將其依次追加在一起生成一個文件,就是我們所說的”CA證書鏈“了。
# cd /etc/pki/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
今后想要驗證由我們的中間CA頒發的證書,比如:www.example.com.cert.pem,這樣即可:
# openssl verify -CAfile /etc/pki/CA/intermediate/certs/ca-chain.cert.pem \ /etc/pki/CA/intermediate/certs/www.example.com.cert.pem /etc/pki/CA/intermediate/certs/www.example.com.cert.pem: OK
至此,我們已經成功創建了中間CA,趕緊用它去簽發用戶證書吧,雖然只是實驗環境,別忘了進行必要的審核哦!