CA和證書
1、概念
PKI: Public Key Infrastructure
簽證機構:CA(CertificateAuthority)
註冊機構:RA
證書吊銷列表:CRL
證書存取庫:
X.509:定義了證書的結構以及認證協議標準
版本號 主體公鑰
序列號 CRL分發點
簽名算法 擴展信息
頒發者 發行者簽名
有效期限
主體名稱
2、證書獲取
1)證書類型:
證書授權機構的證書
服務器
用戶證書
2)獲取證書兩種方法:
使用證書授權機構
生成簽名請求(csr)
將csr發送給CA
從CA處接收簽名
自簽名的證書
自已簽發自己的公鑰
3、安全協議
SSL: Secure Socket Layer
TLS: Transport Layer Security
1995:SSL 2.0Netscape
1996: SSL 3.0
1999: TLS 1.0
2006: TLS 1.1IETF(Internet工程任務組) RFC 4346
2008:TLS 1.2 當前使用
2015: TLS 1.3
功能:機密性,認證,完整性,重放保護
兩階段協議,分為握手階段和應用階段:
握手階段(協商階段):客戶端和服務器端認證對方身份(依賴於PKI體系,利用數字證書進行身份認證),並協商通信中使用的安全參數、密碼套件以及主密鑰。後續通信使用的所有密鑰都是通過MasterSecret生成。
應用階段:在握手階段完成後進入,在應用階段通信雙方使用握手階段協商好的密鑰進行安全通信
4、OpenSSL
1)OpenSSL開源項目
三個組件:
openssl: 多用途的命令行工具,包openssl
libcrypto: 加密算法庫,包openssl-libs
libssl:加密模塊應用庫,實現了ssl及tls,包nss
openssl命令:
兩種運行模式:交互模式和批處理模式
openssl version:查看程序版本號
標準命令、消息摘要命令、加密命令
標準命令:
enc, ca, req, ...
2)對稱加密
工具:openssl enc, gpg
算法:3des, aes,blowfish, twofish
enc命令:
加密:opensslenc -e-des3 -a -salt -in testfile -out testfile.cipher
#-des3為加密算法(可以根據自己需要選擇)
-a 對加密後的數據進行base64編碼,或解密前先對數據進行base64解碼
-salt 加鹽 加鹽後,相同的明文可以得到不同的密文,默認情況下,鹽值是隨機生成的,可以使用-S選項明確制定鹽值。
-in 指定要加密的文件
-out 指定加密後輸出的文件
解密:openssl enc -d -des3-a -salt –in testfile.cipher -out testfile
3)單向加密:
工具:md5sum, sha1sum,sha224sum,sha256sum…openssl dgst
dgst命令:
加密:openssl dgst -md5 [-hex默認] [-out /path/to/filename]/PATH/SOMEFILE
-md5指定加密算法
-out filename:將加密的內容保存到指定文件中
單向加密除了openssl dgst還有md5sum:md5sum/PATH/TO/SOMEFILE
MAC: Message Authentication Code,單向加密的一種延伸應用,用於實現網絡通信中保證所傳輸數據的完整性機制
CBC-MAC
HMAC:使用md5或sha1算法
4)生成用戶密碼:
對用戶密碼進行hash
passwd命令:
幫助:man sslpasswd
openssl passwd -1 -salt SALT(最多8位)
-1:表示使用的bash算法是MD5
-salt SALT:輸入作為salt的字符串
5)生成隨機數:
幫助:man sslrand
openssl rand -base64|-hex NUM
NUM: 表示字節數;
-hex時,每個字符為十六進制,相當於4位二進制,出現的字符數為NUM*2
6)公鑰加密:
算法:RSA, ELGamal
工具:gpg, openssl rsautl(man rsautl)
數字簽名:
算法:RSA, DSA, ELGamal
密鑰交換:
算法:dh
DSA:Digital Signature Algorithm
DSS:Digital Signature Standard
RSA:Digital Signature Algorithm
生成密鑰對兒:man genrsa
7)生成私鑰
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILENUM_BITS
(umask 077; openssl genrsa –out test.key –des 2048)
(命令):表示()裏面的命令是在子shell中運行,不影響當前的shell
NUM_BITS:秘鑰長度(單位bit)
8)從私鑰中提取出公鑰
openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE
Openssl rsa -intest.key –pubout –out test.key.pub
9)隨機數生成器:偽隨機數字
鍵盤和鼠標
塊設備中斷
/dev/random:僅從熵池返回隨機數;隨機數用盡,阻塞
/dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟件生成偽隨機數,非阻塞
※5、創建CA和申請證書
/etc/pki/tls/openssl.cnf文件中定義了申請CA的各種配置,比如路徑:
創建私有CA:
openssl的配置文件:/etc/pki/tls/openssl.cnf
三種策略:匹配、支持和可選
匹配指要求申請填寫的信息跟CA設置信息必須一致,支持指必須填寫這項申請信息,可選指可有可無
1)創建所需要的文件
touch /etc/pki/CA/index.txt 生成證書索引數據庫文件(必須是這個目錄叫這個文件)
echo 01 >/etc/pki/CA/serial 指定第一個頒發證書的序列號(必須是這個目錄叫這個文件)
(如圖,如果不創建的話會在生成證書時報錯)
2)CA自簽證書
A生成私鑰
cd /etc/pki/CA/
(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
作為CA 必須放在/etc/pki/CA/private/下且必須叫cakey.pem
B生成自簽名證書
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: 證書的保存路徑,自簽名必須放在/etc/pki/CA/cacert.pem
生成完之後我們可以將證書導出來到Windows裏可以看一下(記得把後綴改為cer)
查看一下證書
(有些時候需要我們把私鑰和自簽名證書合起來,就一起重定向到一個文件即可,我們在這就不弄了
)
3)頒發證書
A在需要使用證書的主機生成證書請求
給web服務器生成私鑰
(umask 066; openssl genrsa -out /etc/pki/tls/private/test.key 2048)
(這個私鑰文件路徑隨意)
生成證書申請文件test.csr(文件路徑也隨意,文件後綴一般為csr)
openssl req -new -key /etc/pki/tls/private/test.key -days 365 -out etc/pki/tls/test.csr (此命令跟之前CA生成自簽名證書只少了一個-x509)
這裏的-days沒有實際意義,即使你申請了10年,CA那邊也不一定批,所以可以不寫。
註意:默認國家,省,公司名稱三項必須和CA一致,因為策略文件/etc/pki/tls/openssl.cnf中設定的這幾項需要匹配,我們也可以修改它。
把policy改為anything策略的話,就可以都不匹配了。
B將證書請求文件傳輸給CA
C CA簽署證書,並將證書頒發給請求者
openssl ca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt-days 365
-in 證書請求文件
-out 輸出生成crt證書文件
-days 在這裏就是你給指定它頒發的多長時間,如果不寫就是默認值
看看信息有沒有問題,沒有問題就可以輸入y確認頒發了。
查看一下數據庫,果然增加了(V表示有效)
然後把生成的文件發回去
D查看證書中的信息:
opensslx509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates
opensslca -status SERIAL查看指定編號的證書狀態
·我們也可以導出windows查看
現在顯示不能驗證該證書,是因為我們CA自認證文件還沒有安裝
我們來安裝一下:
安裝完之後再看頒發的證書:
信息就顯示了。
4)吊銷證書
A在客戶端獲取要吊銷的證書的serial
openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
B在CA上,根據客戶提交的serial與subject信息,對比檢驗是否與index.txt文件中的信息一致,吊銷證書:
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
取消之後查看一下狀態,變成R了。
C指定第一個吊銷證書的編號
註意:第一次更新證書吊銷列表前,才需要執行
echo 01 >/etc/pki/CA/crlnumber (必須放在這個路徑這個文件)
D更新證書吊銷列表
openssl ca-gencrl -out /etc/pki/CA/crl/crl.pem (必須放在這個路徑這個文件)
查看crl文件:
openssl crl -in /etc/pki/CA/crl/crl.pem-noout -text
本文出自 “Ty_endless” 博客,請務必保留此出處http://tyendless.blog.51cto.com/12435756/1969835
CA和證書