加密解密與OPENSSL建立私有CA

 

一、 安全規範:

1)NIST規定的數據安全性標準:

①保密性:數據保密性;隱私性;

②完整性:數據完整性;系統完整性

③可用性:數據與服務隨時可用

2)OSI,X.800:定義了安全***,安全機制,安全服務

①安全***

被動***:監聽

主動***:報文僞裝、重放、消息篡改、拒絕服務(將有限資源耗盡,使得正常資源無法訪問DDOS)

②安全機制

加密/解密,數字簽名,訪問控制,數據完整性保證,認證交換,數據填充,路由控制,人爲公證

③安全服務

認證

訪問控制

數據保密性:

連接保密性

無連接保密性

選擇域保密性:保密指定的部分

流量保密性

數據完整性

不可否認性

二、密碼算法和協議:

1.對稱加密:【AES】DES,AES,BlowFish,TwoFish,IDEA,RC6,CAST5

(1)常見算法:

DES :Data Encryption Standard ,56bits,IBM研究出來的,

3DES :

AES :Advanced Encrpytion Standard,(128bits,192,256,384,512bits),超越現有計算能力

BlowFish :

TwoFish :

IDEA :

RC6 :

CAST5 :

(2)特性:

① 加密、解密使用同一密鑰

② 加密原理:將明文分割成固定大小的塊,並逐個進行加密。

③ 安全性依賴於密鑰而非算法;因爲算法可以公開

(3)缺陷:

① 密鑰過多,尤其是通信對象過多時,

② 密鑰分發,過程中的潛在風險

(4)加密工具:openssl enc,gpg

Enc實現:

# openssl enc -e -CIPHERNAME -a -salt -in /PATH/FROM/SOMEFILE -out /PATH/TO/SOMEFILE

# openssl enc -d -CIPHERNAME -a -salt -in /PATH/FROM/SOMEIPHERFILE -out /PATH/TO/SOMEFILE

2.公鑰加密(非對稱加密):【RSA】,DSA,Algorithm,ELGamal

(1)常見算法:

①RSA :即可做身份認證,也可做密鑰交換

②DSA :身份認證————數字簽名,Digital Signature Algorithm,Digital Signature Standard

③ELGamal :

(2)特點:

① 密鑰成對出現;

私鑰:Secret Key,僅允許個人使用

公鑰:Public Key,公開給所有人獲得,公鑰從私鑰中提取而來

③ 使用公鑰加密的數據,只能使用與此公鑰配對的私鑰解密;反之亦然

④ 密鑰長度較大,例如512bits,1024,2048,4096bits

⑤ 常用於數據簽名和密鑰交換

(3)用途:

① 身份認證: 私鑰擁有者用自己的私鑰加密的數據,其他人只需要用其公鑰解密,即可認證其身份;

② 密鑰交換:任何個人與被通信方通信之前,首先獲取到對方的公鑰,然後自己生成一個加密(對稱加密)的密碼,然後用對方的公鑰加密,飯後發送給對方。

③ 數據加密:很少使用,因爲密碼太長,速度很慢,不實用,性能很差。

(4)加密工具:gpg,openssl genrsa,elgamal,openssl rsautl

1)數字簽名:RSA,DSA(DSS),ELGamal

2)生成密鑰對兒:

①手動生成私鑰:gendsa,gendh,genrsa(最常用)

# openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS

-out :生成密鑰文件輸出到那個文件

NUM_BITS :指定密鑰長度,512,1024,2048,4096

△Tips:生成的文件的權限一定要修改,否則,其他人都可以r。

Tips:在bash命令行上放在小括號中執行的命令,其實是通過打開一個子shell進程進行的

# (umask 077;openssl genrsa -out /path/to/private_key_file NUM_BITS)

②從私鑰中手動提取公鑰:

# openssl rsa -in /path/from/private_key_file -pubout -out /path/to/pubkey_file

-in :輸入私鑰文件路徑

-putout :輸出爲公鑰(默認私鑰)

-out :輸出公鑰文件路徑

3.單向加密:MD5,SHA1,SHA256,SHA384,SHA512,CRC32

(1)常見算法:

MD5 :128bits,2^128

SHA1 :160bits,2^160

SHA256 :256,2^256

SHA384 :384,2^384

SHA512 :512 /etc/passwd,2^512

CRC32 :用於奇偶校驗,循環冗餘校驗碼

(2)特性:

① 提取數據的特徵碼,結果定長輸出:無論原來的數據有多大級別,其加密結果長度一樣;

② 整個加密過程不可逆;

③ 雪崩效應:原始數據微小的變化,將會導致結果的巨大變化

④ 常用於數據的完整性校驗

⑤ 數據特徵碼的提取,該加密嚴重依賴算法,

(3)加密工具:openssl dgs,md5sum,sha1sum,sha224sum,sha256sum,sha384sum,sha512sum

# openssl dgst -CIPHER /PATH/TO/SOMEFILE

(4)MAC:消息認證碼,單項加密的一種延伸應用,用於實現在網絡通信中保證所傳輸的數據的完整性:高可用集羣中會用到。

機制:

CBC-MAC:

HMAC:使用 md5 或 SHA1 算法。更常見

4.數字簽名:

保證數據完整性,不保證其私密性;

他人可以隨意看,但不能隨意改

5.密鑰交換協議:IKE ,Internet Key Exchange協議,

有兩種常見算法

(1)公鑰加密算法:

用對方的公鑰加密密碼併發送給對方,然後用該加密的密碼實現加密通信

(2)Deffie-Hellman :密碼在互聯網上沒有傳送。

找一個大的素數,對其求N次方後,做開根運算,在現有計算能力下無能爲力。

A:

P,G,(公開)

X (私有)

P^X%G

從B 拿到:(P^Y%G)^X=P^XY%G(密碼)

B:

公開:P,G (公開)

私有:Y (私有)

P^Y%G

從A拿到:(P^X%G)^Y=P^XY%G(密碼)

6.隨機數生成:random urandom

1)熵池(entropy pool):保存硬件中斷產生的隨機數;實質上是內存中的一段存儲空間。被映射成爲設備文件“/dev/random,/dev/udandom”,特殊字符設備

2)獲取當前主機上的硬件中斷信號,中斷間隔時長(一般爲硬盤)來生成隨機數。

【軟件生成的隨機數叫僞隨機數。】

3)隨機數設備:

① /dev/random:僅從熵池總返回隨機數,當熵池中的隨機數耗盡時,取隨機數的進程將被阻塞;設備號(1.8)

② /dev/urandom:先從熵池中取隨機數,當熵池中的隨機數耗盡時,就通過僞隨機數生成器(軟件方式)生成隨機數;設備號(1.9)

③ 生成隨機數:openssl rand:

# openssl rand -hex | -base64 NUM

-hex :十六進制

-base64 :文本編碼方式

NUM :生成密碼位數。

PKI:public Key Infrastructure,公鑰基礎設施

簽證機構;CA

註冊機構:RA

證書吊銷列表;CRL

證書存取庫

SSL:secure socket layer,安全的套接字層,協議

版本:

v1,不安全

v2,

v3,

實現:OpenSSL

TLS:transport layer security

v1=SSLv3

三、一次安全的加密通信過程:

1)發送方:

① 使用單向加密算法提取生成數據的 特徵碼 ;

單向加密——>特徵碼+特徵碼===>數據完整性

② 使用自己的 私鑰 加密 特徵碼 附加在數據後面

公鑰加密——>[特徵碼密文]+數據====>數據完整性

③ 生成用於對稱加密的 臨時密鑰 ;用此 臨時密鑰 加密數據和已經使用私鑰加密後的特徵碼;

對稱加密——>[密文[特徵碼密文]+數據]]===>數據安全性

⑤ 使用接收方的 公鑰 加密此 臨時密鑰 ,附加在對稱加密後的數據後方。

公鑰加密(對方)——>[臨時密鑰][密文[特徵碼密文]+數據]]===>密鑰安全性

2)接受方:

① 使用自己的私鑰解密加密的臨時密鑰,從而獲得對稱密鑰;

② 使用對稱密鑰解密對稱加密的數據和私鑰加密的特徵碼密文,從而獲得數據和特徵碼的密文;

③ 使用發送方的公鑰解密特徵碼密文,從而獲得數據的特徵碼

④ 使用與對方同樣的單向加密算法計算數據的特徵碼,並與解密而來的進行比較,驗證數據的完整性和隱私性。

Tips:以上過程的唯一漏洞之處只有 使用對方的公鑰加密臨時密鑰!如何安全的得到對方的公鑰??故而需要對接受方做數字簽名認證。

四、數字證書:

1. CA:由擁有公信力的第三方機構(CA機構),創建並被CA或用戶放到目錄服務器中供其他用戶檢索的數字格式的用戶私有信息。

2. CA機構功能:保證公鑰信息安全分發。給每個人的公鑰做簽名,以認可其身份。讓用戶安全的得到對方的公鑰信息。

CA之間的交叉信任:

雙方CA的互信,均從根證書機構拿到證書。

CA給每個證書的信息提取特徵碼,並用自己的私鑰加密,附加到證書後面。用戶驗證時,用CA的公鑰來提取特徵碼,並驗證數據的完整性。

3.數字證書功能:

讓通信的雙方,都能夠安全可靠的獲得自己的身份認證標識,並且能夠被通信的對方所認可。

4.數字證書的格式:

1)v1

版本號(Version):必須標識清楚,否則無法識別格式

序列號(serial number):CA用於唯一表示此證書;

簽名算法標識(signature algorithm identifier):用於驗證證書可靠性

發行者的名稱:即CA自己的名稱;

有效期:兩個日期,起始日期和終止日期;

證書主體名稱:證書擁有者名字

證書主體公鑰信息:證書擁有者公鑰

簽名:CA對此證書的數字簽名

2)v2

版本號(Version):必須標識清楚,否則無法識別格式

序列號(serial number):CA用於唯一表示此證書;

簽名算法標識(signature algorithm identifier):

發行者的名稱:即CA自己的名稱;

有效期:兩個日期,起始日期和終止日期;

證書主體名稱:

證書主體公鑰信息:

發行商的唯一標識:CA ID

證書主體的唯一標識:證書屬主ID

簽名:CA對此證書的數字簽名

3)v3

版本號(Version):必須標識清楚,否則無法識別格式

序列號(serial number):CA用於唯一表示此證書;

簽名算法標識(signature algorithm identifier):

發行者的名稱:即CA自己的名稱;

有效期:兩個日期,起始日期和終止日期;

證書主體名稱:證書屬主名稱

證書主體公鑰信息:屬主的公鑰信息

發行商的唯一標識:CA的唯一標識

證書主體的唯一標識:證書擁有者自己的數字標識

擴展信息:

簽名:CA對此證書的數字簽名

5. 證書驗證過程:

1)客戶端向服務器發出回話請求;

2)服務器相應回話請求,(tcp三次握手)

3)客戶端請求服務器證書(SSL握手過程)

4)服務器發送證書

5)客戶端驗證證書:

① 用本地根證書驗證證書的發證CA

② 用本發證CA解密證書籤名,驗證CA的真實性(解密的結果是證書的特徵碼) ③ 用同樣算法計算證書特徵碼,並做比較

④ 域名與證書主體一致性驗證;

⑤ 驗證證書的有效期

⑥ 驗證證書是否在吊銷列表中

6)驗證成功後,從證書中提取服務器的公鑰信息,雙方開始協商使用哪種算法進行加密通信。

7)客戶端生成通話加密密鑰,並用對方公鑰加密後發給對方

8)雙方用剛纔建立的加密協定進行會話。

Tips:一個協議一旦使用了ssl協議,其就不在是其本身了,例如:http(80端口)-->ssl-->https(403端口)

6. 撤銷證書格式:證書撤銷鏈,證書撤銷列表

|算法 |

|CA名稱 |

|本次更新日期 |

|下次更新日期 |

|————————|

|用戶證書序列號|

|----------------------|

| 撤銷日期 |

|————————|

| . |

| . |

| . |

| [有多個] |

------------------------

| CA 數字簽名 |

------------------------

五、使用OpenSSL建立私有CA:

(1)OpenSSL組成:

1)libcrypto:加密、解密庫文件。各種加密算法。

2)libssl:ssl協議實現庫

3)openssl:多用途命令行工具,每種功能都使用專門的子命令來實現。

子命令分類:

①標準命令;製作證書,建立私有CA等都可以實現。

②消息摘要命令:單向加密算法;

③加密解密相關命令;

(2)配置文件: /etc/pki/tls/openssl.conf

工作目錄: /etc/pki/CA/

(3)建立私有CA實操:

① 生成私鑰文件:/etc/pki/CA/private/cakey.pem

私鑰用於簽發證書時,向證書添加數字簽名使用;

# (umask 077 ;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

clip_image002[4]

② 生成自簽證書:==>公鑰

用於實現與每個通過此CA獲取到證書的通信方,完成數據交互時,驗證對方證書合法性時使用的。每個通信方都導入此證書至“受新人的證書頒發機構”。

服務器的自簽證書,需要客戶端將此證書導入到受信任的證書列表中,才能驗證這些證書。

# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem –days

-new:生成新的證書籤署請求

-key:私鑰文件路徑

-days #: 證書有效時長,單位爲天

-out:輸出文件保存位置

-x509 :直接輸出自簽署的證書文件,通常只有構建CA時才這麼用。

clip_image004[4]

③ 提供輔助文件:

/etc/pki/CA/index.txt

# touch /etc/pki/CA/index.txt

/etc/pki/CA/serial

echo 01 > /etc/pki/CA/serial

(4)給節點頒發證書:

① 節點申請證書:

在證書申請的主機上進行如下步驟:

a.生成私鑰

b.生成證書籤署請求

Tips:a. 其中的subject信息部分,要與CA的保持一致;正確與否無所謂

b. Common Name要使用此主機在通信正式使用的名字。

② CA簽發證書:

a.驗證請求者信息;

b.簽署證書:

# openssl ca -in /PATH/FROM/CSR_FILE -out /PATH/TO/CRT_FILE -days N

c.將簽署號的證書發還給請求者。

(5)吊銷證書:

1.獲取吊銷證書的序列號:

# openssl x509 -in /PATH/FROM/CRT_FILE -noout -serial -subject

2.實現證書吊銷

a.吊銷證書

# openssl ca -revoke /PATH/FROM/CRT_FILE

b.生成吊銷證書的編號

# echo 01 > /etc/pki/CA/crlnumber

c.更新證書吊銷列表

# openssl crl -gencrl -out THISCA.crl

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章