CA是什麼?
在網絡中兩臺主機通訊過程中,數據的加密解密依賴於對方的公鑰,因此就需要一種可靠機制能夠保證公鑰數據的安全性,這種機制就是CA。CA是一個證書頒發機構,這個機構負責證書的頒發,誰需要就去CA購買,買完之後去驗證證書就可以了。那我們如何知道或者確定一個證書就是正規的CA頒發的呢?證書是分等級的,就是說二級證書是由上一級證書驗證,那麼到了頂級了呢?這時候只能自己給自己驗證,就是自簽名。就是根證書需要自己給自己認證。
CA包含了什麼?
CA是PKI(Public Key Infrastructure 公鑰基礎設施)的一個組成部分。
KPI包括:
簽證機構:CA(Certificate Authority)相當於辦理×××的公安局
註冊機構:RA 相當於辦理×××時去申請的派出所
證書吊銷列表:CRL 相當於我們證件丟失時掛失的內容
證書存取庫:當被人去請求認證時的資料庫
數字證書的格式(X.509:定義了證書的結構以及認證協議標準)
版本號;
序列號:CA用於惟一標識此證書;
簽名算法;
頒發者:即CA自己的名稱;
有效期限:兩個日期,起始日期和終止日期;
主體名稱:證書擁有者自己的名字;
主體公鑰:證書擁有者自己的公鑰;
CRL分發點;
擴展信息;
發行者簽名:CA對此證書的數字簽名;
證書通常有兩類用途:用戶證書和主機證書。
數字證書的獲取
獲取證書的方法有兩種:向RA註冊申請,或者自己建立私有CA。向RA註冊申請CA是需要花錢購買的,通常用於企業生產環境中,以滿足業務的需求;但有時我們僅僅用於企業內部自身使用或者個人測試使用,因此我們就沒必要去花錢購買CA證書,而OpenSSL工具可以滿足我們創建私有CA的需求。
使用OpenSSL構建私有CA
首先看看配置文件openssl的配置文件:/etc/pki/tls/openssl.cnf,截取重要的一段如下:
[ ca ] default_ca =CA_default # The default casection <==默認CA名 [ CA_default ] dir =/etc/pki/CA # Where everythingis kept <==CA的默認目錄 certs =$dir/certs # Where the issuedcerts are kept <==需要指定存放證書的目錄,文件名也是手動指定的 crl_dir =$dir/crl # Where the issuedcrl are kept <==證書吊銷列表 database =$dir/index.txt # database indexfile. <==證書數據庫,默認沒有。需要創建 #unique_subject =no # Set to 'no' to allowcreation of # several ctificates with same subject. new_certs_dir =$dir/newcerts # default place fornew certs. <==生成新的證書默認存放路徑 certificate =$dir/cacert.pem # The CA certificate <==CA自己的證書,上級CA頒發 serial =$dir/serial # The current serial number <==下一個證書的證書編號,默認沒有,創建必須寫一個起始編號,必須16進制 crlnumber =$dir/crlnumber # the current crl number <==下一個被吊銷的證書編號 # mustbe commented out to leave a V1 CRL crl =$dir/crl.pem # The current CRL <==證書吊銷 private_key =$dir/private/cakey.pem# The private key <== CA的私鑰
三種策略:匹配:指要求申請填寫的信息跟CA設置信息必須一致
支持:指必須填寫這項申請信息
可選:指可有可無
1、創建所需的文件
touch /etc/pki/CA/index.txt -------------------生成證書索引數據庫文件 echo 01 > /etc/pki/CA/serial------------------定第一個頒發證書的序列號
2、CA自簽證書
生成私鑰
cd /etc/pki/CA/
(umask066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
生成自簽名證書
openssl req -new -x509 –key /etc/pki/CA/private/cakey.pem -days 7300 -out etc/pki/CA/cacert.pem----------證書文件必須叫這個
-new: 生成新證書籤署請求
-x509: 專用於CA生成自簽證書
-key: 生成請求時用到的私鑰文件
-days n:證書的有效期限
-out /PATH/TO/SOMECERTFILE: 證書的保存路徑
注意:在後面集羣環境下有可能會用到把私鑰文件和生成的證書文件合在一起。
3、申請證書(頒發證書)
A 在需要使用證書的主機生成證書請求
給web服務器生成私鑰
(umask066; openssl genrsa -out /etc/pki/tls/private/test.key 2048)
生成證書申請文件
openssl req -new -key /etc/pki/tls/private/test.key -days 365 -out etc/pki/tls/test.csr
C CA簽署證書,並將證書頒發給請求者
opensslca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt -days 365
注意:默認國家,省,公司名稱三項必須和CA一致
再回去看第一步我們創建的兩個必須的文件,已經發生變化
同時也在newcerts下生成了一個新文件02.pem。和指定的test.crt 一樣。
再把頒發晚的證書傳給 客戶端。
D 收到證書後進行查看
openssl x509 -in /etc/pki/CA/certs/test.crt -noout -text|issuer|subject|serial|date-------------------可以選擇需要查看啥
4、吊銷證書
opensslca -revoke /etc/pki/CA/newcerts/02.pem
吊銷完得指定證書吊銷列表,生產場景中需要把這個列表公佈到網站上,通知網絡中這次證書被吊銷。
openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem <==更新證書吊銷列表
注意:第一次更新證書吊銷列表前,才需要執行
echo 01 > /etc/pki/CA/crlnumber <==創建吊銷列表編號