linux中加密解密以及Opensll建立CA

 現在如今個人以及公司對自己的數據以及隱私越來越關注,之前美國斯諾登事件的爆出,又將通訊安全話題引發激烈的討論。下面我們就來說下linux中的加密解密,以及通訊過程中如何確保通訊的安全。

常見的加密方法有三種:對稱加密、單向加密、非對稱加密,下面簡單說下這三種加密方式。

對稱加密:加密和解密使用同一個密鑰;依賴於算法和密鑰;安全性依賴於密鑰,而非算法常見算法有DESData Encryption Standard, 56bits、3DES、AES: Advanced Encrpytion Standard, (128bits, 192, 256, 384, 512bits)、Blowfish、Twofish、IDEA、RC6、CAST5。此些算法都有由數學家們通過精心計算得到。

 特性:

1、加密、解密使用同一密鑰;

2、將明文分隔成固定大小的塊,逐個進行加密;

           缺陷:

    1、密鑰過多;

    2、密鑰分發;


   非對稱加密:公鑰從私鑰中提取而來;使用公鑰加密的數據,只能使用與此公鑰配對兒的私鑰解密;反之亦然;有公鑰和私鑰的密鑰對,私鑰:secret key,僅允許個人使用,公鑰:public key,公開給所有獲取;私鑰擁有者用自己的私鑰加密的數據,只要用其公鑰能解密,即可認證其身份,與被通信方通信之前,首先獲取到對方的公鑰,自己生成一個加密密碼,用對方的公鑰加密,併發送給對方,對方得到自己公鑰加密的數據以及發送者的私鑰。通常的算法有RSA、DSA、ELGamal,主要的特徵有:1、密鑰長度較大,例如512bits, 2048bits, 4096bits,2、加密解密分別使用密鑰對兒中的密鑰相對進行,3、常用於數據簽名和密鑰交換


   單向加密:通過提出數據的特徵碼獲得,它的特性爲:1、密鑰長度較大,例如512bits, 2048bits, 4096bits;2、雪崩效應:原始數據微小改變,將會導致結果巨大變化;3、不可逆;通常的算法有:MD5(128bits定長輸出)、SHA1(160bits定長輸出)、SHA256(160bits定長輸出)、SHA256(256bits定長輸出)、SHA512(128bits定長輸出)等。

  

在一次加密通信過程的過程如下。

   發送者:

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

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

    3、生成用於對稱加密的臨時密鑰;

    4、用此臨時密鑰加密數據和已經使用私鑰加密後的特徵碼;

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

  接收方:

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

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

    3、使用發送方的公鑰解密特徵碼密文,從而獲得從計算生成的特徵碼;

    4、使用與對方同樣的單向加密算法計算數據的特徵碼,並與解密而來的進行比較;

此過程比較繁瑣,故通常的使用者不會手動每次去操作此過程,因此產生了SSL,SSL:secure socket layer(即獲取到對方服務器的CA證書,得到對方的公鑰,生成私鑰,然後發送給服務器端,服務器發送數據給請求方,請求方有服務器端的公鑰,可以解密,這樣就能形成聯繫),通常證書主要有兩類,主機證書以及用戶證書,用戶證書包含主機證書將自己的私鑰形成的公鑰,以及CA證書等信息。CA:CA證書的發證機構爲具有公信力的機構,一般網站會購買一個CA證書用於認證,保證公鑰信息的安全分發;

數字證書的格式(x.509 v3):

   版本號(version)

   序列號(serial number):CA用於惟一標識此證書;

   簽名算法標誌(Signature algorithm identifier)

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

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

   證書主體名稱:證書擁有者自己的名字

   證書主體公鑰信息:證書擁有者自己的公鑰;

   發行商的惟一標識:

   證書主體的惟一標識:

   擴展信息:

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

openssl是基於ssl開發的,在linux上使用,openssl的組成部分:libcrypto(加密、解密庫文件)、libssl( ssl協議實現)、openssl(多用途命令行工具,每種功能都使用專用的子命令來實現)。

下面首先來說下openssl的一些加密指令:

openssl:

子命令分類:標準命令、消息摘要命令、加密、解密相關的命令

 

加密文件(對稱加密):

工具:openssl enc, gpg

算法:des, 3des, aes, blowfish, twofish, idea, cast5

enc工具:

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

 例openssl enc -e -des3 -a -salt -in path -out path.de3 

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

例openssl enc -d -des3 -a -salt -in path.de3 -out path.22

                                           

單向加密:

算法:md5, sha1

工具:openssl dgst, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum

 # openssl dgst -CIPHER(算法如md5) /PATH/TO/SOMEFILE...

  或者  md5sum  /PATH/TO/SOMEFILE

 例如:

  [root@localhost tmp2]# openssl dgst -md5 lib

  MD5(lib)= 8fcd1d3f02caeebfa22c649471a57b28               

  [root@localhost tmp2]# md5sum lib

  8fcd1d3f02caeebfa22c649471a57b28  lib

 MAC: 消息認證碼,單向加密的一種延伸應用,用於實現在網絡通信中保證所傳輸的數據的完整性;

 機制:

 CBC-MAC

 HMAC:使用md5或sha1算法

 生成用戶密碼:

 # openssl passwd -1 -salt 8bits   -salt是加在密碼前面,用於加強加密

 生成隨機數:

 # openssl rand -hex|-base64 NUM   -hex是16位  -base64生成字母和數字

 隨機數生成器:

 random, urandom 

熵池:保存硬件中斷產生的隨機數 

/dev/random:僅從熵池中返回隨機數,當熵池中的隨機數耗盡時,取隨機數的進程將會被阻塞;

/dev/urandom:先從熵池中取隨機數,當熵池中的隨機耗盡時,就通過僞隨機數生成器生成隨機數;


下面說下我們平時工作會遇到的在自己公司建立私有的CA,以及發證、簽證的過程;


使用OpenSSL構建私有CA的過程爲主機在服務器生成私鑰,然後生成自己證書文件;

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

(2) 證書:每個通信方都導入此證書至“受信任的證書頒發機構”;

配置文件(默認CA的配置文件):/etc/pki/tls/openssl.cnf

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

[root@localhost CA]# ls

certs  crl  newcerts  private

certs證書文件存放 

crl       吊銷列表

newcerts 新證書文件

private 私鑰存放位置

 

建立私有CA:

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

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

2、生成自簽證書

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

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

-key:私鑰文件路徑,用於提取公鑰;

-days N: 證書有效時長,單位爲“天”;

-out:輸出文件保存位置;

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

3、提供輔助文件

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

# echo 01 > /etc/pki/CA/serial  (01表示第一個)

 

給節點發證書:

1、節點申請證書

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

(1) 生成私鑰;(umask 077; openssl genrsa -out httpy.key 1024)

(2) 生成證書籤署請求; openssl req -new  -key /etc/http.key -out /etc/httpd/http.csr

(3) 把請求發送給CA;                                                       

注意:

(a) 其中的subject信息部分,要與CA的保持一致;

(b) Common Name要使用此主機在通信真實使用名字;

 

2、CA簽發證書

(1) 驗正請求者信息

(2) 簽署證書

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

(3) 把簽署好的證書發還給請求者

 

吊銷證書:

1、獲取吊銷證書的序列號;

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

 

2、實現證書吊銷

(1) 吊銷證書

# openssl ca -revoke /PATH/FROM/CRT_FILE

 

(2) 生成吊銷證書的編號

echo 01 > /etc/pkie/CA/crlnumber

 

(3) 更新證書吊銷列表

# openssl crl -gencrl -out THISCA.cr


小結下,在公司的服務器中很有可能會用到私有CA,以保證通信的安全性。

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