1. 程式人生 > >CA和證書

CA和證書

linux

1、概念

PKI: Public Key Infrastructure

簽證機構:CACertificateAuthority

註冊機構:RA

證書吊銷列表:CRL

證書存取庫:

X.509:定義了證書的結構以及認證協議標準

版本號 主體公鑰

序列號 CRL分發點

簽名算法 擴展信息

頒發者 發行者簽名

有效期限

主體名稱

2、證書獲取

1)證書類型:

證書授權機構的證書

服務器

用戶證書

2)獲取證書兩種方法:

使用證書授權機構

生成簽名請求(csr

csr發送給CA

CA處接收簽名

自簽名的證書

自已簽發自己的公鑰

3、安全協議

SSL: Secure Socket Layer

TLS: Transport Layer Security

1995SSL 2.0Netscape

1996: SSL 3.0

1999: TLS 1.0

2006: TLS 1.1IETF(Internet工程任務組) RFC 4346

2008TLS 1.2 當前使用

2015: TLS 1.3

功能:機密性,認證,完整性,重放保護

兩階段協議,分為握手階段和應用階段:

握手階段(協商階段):客戶端和服務器端認證對方身份(依賴於PKI體系,利用數字證書進行身份認證),並協商通信中使用的安全參數、密碼套件以及主密鑰。後續通信使用的所有密鑰都是通過MasterSecret生成。

應用階段:在握手階段完成後進入,在應用階段通信雙方使用握手階段協商好的密鑰進行安全通信

4OpenSSL

1OpenSSL開源項目

三個組件:

openssl: 多用途的命令行工具,包openssl

libcrypto: 加密算法庫,包openssl-libs

libssl:加密模塊應用庫,實現了ssltls,包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,sha256sumopenssl dgst

dgst命令:

加密:openssl dgst -md5 [-hex默認] [-out /path/to/filename]/PATH/SOMEFILE

-md5指定加密算法

-out filename:將加密的內容保存到指定文件中

單向加密除了openssl dgst還有md5summd5sum/PATH/TO/SOMEFILE

技術分享

MAC: Message Authentication Code,單向加密的一種延伸應用,用於實現網絡通信中保證所傳輸數據的完整性機制

CBC-MAC

HMAC:使用md5sha1算法

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 rsautlman rsautl

數字簽名:

算法:RSA, DSA, ELGamal

密鑰交換:

算法:dh

DSADigital Signature Algorithm

DSSDigital Signature Standard

RSADigital 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 指定第一個頒發證書的序列號(必須是這個目錄叫這個文件)技術分享

技術分享

(如圖,如果不創建的話會在生成證書時報錯)

2CA自簽證書

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

BCA上,根據客戶提交的serialsubject信息,對比檢驗是否與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和證書