創建CA(Certificate Authority)
CA的儲存格式主要有2種:x509和pkcs12
x509是目前最主流的CA儲存格式,在x509格式的證書中,儲存的內容主要有:
證書的公鑰和使用期限
證書的合法擁有着
證書該如何被使用
CA的信息
CA簽名的校驗碼
默認情況下,TCP/IP模型和OSI模型,並沒有實現數據的加密,而要實現數據的加密需要使用TLS/SSL協議,TLS和SSL在有些Linux版本上實現的機制是相同的,因此在這裏我們之介紹SSL協議
SSL(Secure Socket Layer)協議其實就是一個庫文件,這裏面含有各種加密算法,因此當應用層的數據交給傳輸層時,如果要實現數據加密,就會去調用這個SSL庫文件,這樣就實現了數據的加密功能。
SSL也是有版本的,有SSLv1,SSLv2,SSLv3,現在主流的是SSLv2和SSLv3。SSLv1現在基本已經沒人使用了,因爲它加密的數據不***全。
這裏以http爲例,講述SSL工作原理,整個過程如下:
由於SSL是一種協議,想要實現它,我麼可以使用openssl命令,openssl是SSL的開源實現,openssl主要包含了2個庫文件:
libcrpto:這是一個通用加密庫文件,裏面含有各種加密算法。我們的數據就是通過這裏面的算法來
實現數據加密的。
libssl:這個庫文件是TLS/SSL的實現,它是基於會話、實現了身份認證、數據機密性和會話完整性
的TLS/SSL庫
因此openssl這個命令非常的強大
接下介紹關於openssl的使用,以及如何使用openssl創建CA的。
openssl是一個多用途命令行工具,包含了各種加密算法,還可以創建私鑰CA,不過常見的私鑰CA只能在公司內部使用。
openssl ?:可以顯示openssl的標準命令和各種加密協議
openssl speed [加密算法] :測試openssl對各種加密算法的速度
openssl rand -base64 NUMBITS:用來生成指定位數的隨機密碼
openssl passwd -1 {PASSWD} :給某個用戶的賬號密碼加密
openssl dgst -sha1 FILENAME:給某個文件生成校驗碼
sha1 FILENAME:也可以生成某個文件的校驗碼
openssl version:查看當前使用的openssl版本號
openssl還可以對某個文件進行加密
openssl enc -des3 -salt -a -e -in inputfile -o outputfile
-e:表示加密
-d:表示解密
-in:要加密的文件
-out:加密後的文件
使用openssl創建私鑰CA
創建私有CA的步驟主要有2步:
1、生成一對密鑰
創建私鑰:
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem NUMBITS)
使用(),該命令將會在子shell中執行,且執行完畢後退出子shell,由於密鑰文件需要保
密,因此這裏將創建的私鑰文件的權限指定爲600;
-out cakey.pem就是私鑰的文件。這裏的文件要與/etc/pki/tls/openssl.cnf中的私鑰文件要相同
NUMBITS就是密鑰的長度
從私鑰中提取公鑰(公鑰是從私鑰提取出來的)
openssl genrsa -in /etc/pki/CA/private/cakey.pem -pubout
2、生成自簽證書
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem
-days 365
使用openssl x509 -text -in /etc/pki/CA/cacert.crt 可以查看這個證書的內容
通過這兩步就可以手動創建一個CA了。 不過這樣創建的CA還不能頒發證書,要想給客戶頒發證書還需要相應的文件,這些文件我們可以根據私有CA的配置文件/etc/pki/tls/openssl.conf來手動創建。
私有CA的配置文件/etc/pki/tls/openssl.conf,內容有:
這裏之介紹我們需要的內容
[ CA_default ]
dir =/etc/pki/CA #定義默認CA目錄
certs = $dir/certs #客戶端證書路徑
crl_dir = $dir/crl #證書吊銷列表的路徑
database = $dir/index.txt #保存已發出去的證書,由於檢索
new_certs_dir = $dir/newcerts # 保存剛生成的證書
certificate = $dir/cacert.pem # CA自己的證書
serial = $dir/serial # 證書的序列號,默認是從01開始
crlnumber = $dir/crlnumber #證書吊銷列表的工作號
crl = $dir/crl.pem # 證書吊銷列表的文件
#證書吊銷列表保存着曾經發出的證書,但是並未過期,而是由於某些原因不能使用了(安全機制)
private_key = $dir/private/cakey.pem # 私鑰文件
因此我們需要在/etc/pki/CA/目錄下創建私鑰文件,CA證書、cert、crl、newcerts目錄,創建serial和index.txt文件
爲客戶端頒發證書
首先客戶端要爲某個程序或者服務生成證書,最好在相應程序的目錄下創建證書,例如以http爲例,在/etc/httpd/ssl目錄下創建如下文件即可:
1、需要在客戶端本地創建私鑰
openssl genrsa -out keyfile 1024
2、生成頒發證書請求文件並傳給CA
openssl req -new -key keyfile -out KEYFILE.csr(請求文件後綴一定要是.csr)
3、CA簽署請求文件
openssl ca -in KEYFILE.csr -out CERTIFICATE.crt -days 365(有效期限爲3365天)
4、簽署完成後就生產一個證書 ,並將證書傳給客戶端。
此時/etc/pki/CA/index.txt和/etc/pki/CA/serial文件同時發生改變。
說明:由於整個過程是在同一臺電腦上完成的,因此客戶端生成的頒發證書請求就不需要傳給CA了,CA簽署的證書也不用傳給客戶端了。因爲CA和客戶端使用同一臺主機。
總結:整個創建證書的步驟
1、創建私鑰CA
創建一對密鑰
生成自簽證書
2、客戶端需要:
創建一對密鑰
生成頒發證書請求(請求文件後綴爲.csr)
將請求發給CA
3、CA 簽署該請求,生成證書,在傳給客戶端