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