openssl是實現ssl協議的應用程序,可以使用yum install -y openssll來安裝,構建私有CA之前先來了解openssl的使用;
openssl的主配置文件:/etc/pki/tls/openssl.cnf
[CA_default]
dir:CA的主目錄
certs:已頒發證書的存儲位置
crl_dir:已吊銷證書的存儲位置
database:證書索引文件
new_certs_dir:新頒發證書的存儲位置
certificate:CA證書文件
serial:證書頒發時的當前序列號
crlnumber:吊銷證書的當前序列號
crl:當前使用的CRL
private_key:CA私鑰
RANDFILE:私有隨機數生成器文件
私有CA作爲單位或組織內部多臺主機驗證身份使用,不在互聯網上起作用,是基於ssl協議利用openssl搭建的,openssl私有CA使用的x.509的證書,構建私有CA分爲CA服務器操作和客戶機操作。
1、構建私有CA
a、私有CA服務器生成私鑰
[root@www1 CA]# (umask 077; openssl genrsa
-out private/cakey.pem 2048) 命令解釋
括號():在當前shell的zishell中執行
umask
077:設定默認umask,這樣生成的證書權限就是600,除了root用戶其他用戶均沒有操作權限;
genrsa:生成私鑰命令
-out:輸出文件,後面是私鑰輸出的路徑名字
2048:加密位數
b、生成自簽署證書
req子命令:生成PKCS#10格式的證書籤署請求
-new:生成新的證書籤署請求;
-key /path/to/private_key_file:私鑰文件路徑;
-daysn:證書有效時長;
-out /path/to/request_file: 生成的證書請求文件路徑;
x509:專用於CA生成自簽署證書時;
-newkey rsa:NUM 無需事先專門生成私鑰文件,而是生成請求時直接生成私成私鑰,並提取公鑰用於證書;也就是說上面a步驟可以不執行,而直接使用此命令直接生成私鑰並簽署;
在給服務器簽署證書的時候需要和此處的位置和公司內容保持一致,因爲這是一個私有CA,是屬於這個公司,只能簽署這個公司內部的服務器;
[root@www1 CA]# touch ./{index.txt,serial}
[root@www1 CA]# echo 01 > serial
生成索引文件和序號,這裏需要手動添加序號01,以後再簽署證書時就不用了;
2、給節點服務器發放證書
私有CA服務器上面已經構建好了,開始爲內部服務器發放證書
此處是以http服務器爲例,證書位置爲/etc/httpd/conf/certs/
a、http服務器生成私鑰
和上面CA服務生成私鑰的方法一樣;
b、生成私鑰之後,要想讓CA簽署需要生成證書籤署請求;
密碼可以留空,這樣證書籤署請求就已經生成,需要私有CA服務器簽署;
c、把請求文件發送給CA
scp httpd.csr CA服務器IP:路徑(例如:172.16.100.1:/tmp)
d、私有CA服務器簽署證書:此處是在CA服務器上進行
簽署時會顯示證書的詳細信息,會有兩次確認是否簽署,直接y就可以簽署;這樣這書就 已經簽署好了;
此時查看CA服務器索引文件會發現已經多了一條,正是簽署的那臺服務器的證書
e、將簽署好的證書發送給服務器
scp /tmp/httpd.src http服務器IP:路徑(例如:172.16.100.2:/etc/httpd/conf/certs)
此時證書已經簽署好了,如果客戶端想通過https訪問,則需要去CA服務器下載CA服務器的 正式, 具體的認證過程:客戶端通過https訪問時,服務器會將自己的證書發送給客戶端,客戶端 根據下載的CA證書中的公鑰解密服務器的證書的數字簽名,如果和證書中描述的信息符合,則證 明來源正確,再通過單向加密算法,提取http服務器的證書文件的特徵碼,對比CA證書中的記錄, 如果符合則說明證書沒有被篡改,再次驗證http服務器主體信息與服務器地址是否相同,相同則會 將信任http服務器。
[root@www1 certs]# openssl x509 -in httpd.crt -noout -subject
查看證書主體信息
[root@www1 certs]# openssl x509 -in httpd.crt -noout -serial
查看證書序列號
[root@www1 certs]# openssl x509 -in httpd.crt -noout -text
查看證書文本信息
3、證書吊銷
服務器不使用了,證書需要吊銷,以免出現安全問題;
a、獲取要吊銷證書的序列號serial,利用上面的命令可以查看
b、CA服務器操作
1、根據證書持有者提交的serial和subject信息來與index.txt數據庫文件中的信息是否一致;
2、吊銷證書
3、生成吊銷證書的編號(如果是第一次吊銷)
[root@www1 CA]# echo 01 > /etc/pki/CA/crlnumber
4、更新證書吊銷列表
[root@www1 CA]# cd crl
[root@www1 crl]# openssl ca -gencrl -out thisca.crl
此時我們再來查看index.txt文件
之前的V已經變成R了,說明序列號爲01的證書已經時吊銷狀態了
4、私有CA的構建以及給服務器簽署、吊銷證書過程就是這樣子,有什麼不對的地方誠心希望指出。