所謂的 SSL/TLS 認(rèn)證是加密的公鑰認(rèn)證,它由一個公用密鑰和私用密鑰組成。證書用來認(rèn)證終端和加密數(shù)據(jù)的。例如,用在 web 服務(wù)器(https)或者郵件服務(wù)器(imaps)。
我們需要一個證書頒發(fā)機構(gòu)來簽署我們的證書。這一步通常由供應(yīng)商提供,如 Thawte、Verisign等。不過,我們也可以創(chuàng)建我們自己的。
創(chuàng)建一個證書簽發(fā)申請(signing request)。這個申請需要一個已經(jīng)包含所有必需的信息的未簽署證書(公共部分)。該證書申請通常發(fā)送到認(rèn)證供應(yīng)商去簽署。這一步同樣也在本地機器上創(chuàng)建了私鑰。
證書頒發(fā)機構(gòu)簽署證書。
如果有需要,加入證書和密鑰到單個文件來給應(yīng)用程序使用(web 服務(wù)器、郵件服務(wù)器等)。
我們使用 /usr/local/certs 作為這個例子的目錄或者根據(jù)你的設(shè)置相應(yīng)的編輯 /etc/ssl/openssl.cnf 文件,因此你知道文件將創(chuàng)建在哪里。以下是 openssl.cnf 的相關(guān)部分:
[ CA_default ]
dir = /usr/local/certs/CA # 保存所有信息的文件夾
certs = $dir/certs # 已生成證書的默認(rèn)保存目錄
crl_dir = $dir/crl # 生成的證書撤銷列表(CRL)的默認(rèn)保存目錄
database = $dir/index.txt # 保存已簽發(fā)證書的文本數(shù)據(jù)庫文件
確保所有目錄已經(jīng)創(chuàng)建
# mkdir -p /usr/local/certs/CA
# cd /usr/local/certs/CA
# mkdir certs crl newcerts private
# echo "01" > serial # 僅當(dāng) serial 不存在時
# touch index.txt
如果你沒有來自供應(yīng)商的認(rèn)證授權(quán),你必須創(chuàng)建你自己的。如果打算去供應(yīng)商簽署申請,那么這個步驟不是必須的。創(chuàng)建認(rèn)證授權(quán) (CA):
# openssl req -new -x509 -days 730 -config /etc/ssl/openssl.cnf \
-keyout CA/private/cakey.pem -out CA/cacert.pem
要創(chuàng)建一個新證書(比如給郵件服務(wù)器或 web 服務(wù)器),首先用其私鑰創(chuàng)建證書申請。如果你的應(yīng)用程序不支持加密的私鑰(比如 UW-IMAP 就不支持),那么就用 -nodes
來禁用加密。
# openssl req -new -keyout newkey.pem -out newreq.pem \
-config /etc/ssl/openssl.cnf
# openssl req -nodes -new -keyout newkey.pem -out newreq.pem \
-config /etc/ssl/openssl.cnf # 不對這個密鑰加密
該證書申請由 CA 簽發(fā)確認(rèn),這個步驟通常由供應(yīng)商完成。注意:在下面命令中替換 "servername" 成你的服務(wù)器名稱。
# cat newreq.pem newkey.pem > new.pem
# openssl ca -policy policy_anything -out servernamecert.pem \
-config /etc/ssl/openssl.cnf -infiles new.pem
# mv newkey.pem servernamekey.pem
現(xiàn)在,servernamekey.pem 就是私鑰,servernamecert.pem 就為服務(wù)器的證書。
IMAP 服務(wù)器想要私鑰和服務(wù)器證書在同一個文件中。通常,這還是比較容易處理的,但是該文件要保證安全! Apache 也可以處理好它。創(chuàng)建一個包含證書和密鑰的文件 servername.pem 。
用文本編輯器打開私鑰文件(servernamekey.pem),并拷貝私鑰到 "servername.pem" 文件中去。
服務(wù)器證書(servernamecert.pem)也做同樣的動作。
最后 servername.pem 文件應(yīng)該看起來像這樣:
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDutWy+o/XZ/[...]qK5LqQgT3c9dU6fcR+WuSs6aejdEDDqBRQ
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIERzCCA7CgAwIBAgIBBDANB[...]iG9w0BAQQFADCBxTELMAkGA1UEBhMCREUx
-----END CERTIFICATE-----
現(xiàn)在我們的 /usr/local/certs/ 目錄中有了這些;
CA/private/cakey.pem (CA 服務(wù)器私鑰)
CA/cacert.pem (CA 服務(wù)器公鑰)
certs/servernamekey.pem (服務(wù)器私鑰)
certs/servernamecert.pem (服務(wù)器已簽署的證書)
certs/servername.pem (私鑰和服務(wù)器證書)
要保證私鑰的安全!
要查看證書信息,只要這么做:
# openssl x509 -text -in servernamecert.pem # 顯示證書信息
# openssl req -noout -text -in server.csr # 顯示申請信息
# openssl s_client -connect cb.vu:443 # 檢查 web 服務(wù)器認(rèn)證信息
更多建議: